<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kamila Santos Oliveira</title>
    <description>The latest articles on DEV Community by Kamila Santos Oliveira (@kamilacode).</description>
    <link>https://dev.to/kamilacode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F92050%2F30c28b5c-ff56-42d3-8aa3-76322dd9f901.png</url>
      <title>DEV Community: Kamila Santos Oliveira</title>
      <link>https://dev.to/kamilacode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kamilacode"/>
    <language>en</language>
    <item>
      <title>Microsserviços com Spring Cloud: Introdução</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Sat, 10 Apr 2021 14:48:09 +0000</pubDate>
      <link>https://dev.to/womakerscode/microsservicos-com-spring-cloud-introducao-3cn6</link>
      <guid>https://dev.to/womakerscode/microsservicos-com-spring-cloud-introducao-3cn6</guid>
      <description>&lt;h2&gt;
  
  
  O que são microsserviços?
&lt;/h2&gt;

&lt;p&gt;São uma abordagem de arquitetura na qual o software consiste de pequenos serviços independentes que se comunicam entre si e são organizados de acordo com seus domínios de negócio.&lt;/p&gt;

&lt;p&gt;Em arquiteturas monolíticas, os processos são extremamente acoplados e são executados como um único serviço , sendo assim se uma parte do sistema tiver a necessidade de escalar será necessário escalar o sistema todo.&lt;/p&gt;

&lt;p&gt;Microsserviços são autônomos, cada serviço pode ser desenvolvido, implantado e escalado sem interferir em outros serviços.&lt;/p&gt;

&lt;p&gt;Microsserviços são especialistas, cada serviço é desenhado para resolver um problema específico, se for necessário adicionar código de outras responsabilidades é recomendável separar em outro serviço.&lt;/p&gt;

&lt;p&gt;Microsserviços são resilientes, a independência do serviço aumenta a resiliência a falhas na arquitetura, se um deles tiver problema , só afetará a parte do fluxo pela qual ele é responsável.&lt;/p&gt;

&lt;p&gt;Microsserviços facilitam a reutilização de código, a divisão em módulos com responsabilidades bem definidas possibilita que funções específicas de um serviço possam ser utilizadas para complementar features sem outros sem a necessidade de escrever um código novo.&lt;/p&gt;

&lt;p&gt;Microsserviços permitem ter liberdade na escolha da stack, pois n microsserviços de n linguagens diferentes podem se comunicar via endpoints sem problemas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spring Cloud
&lt;/h2&gt;

&lt;p&gt;Fornece uma série de ferramentas que facilitam a criação de aplicações distribuídas e escaláveis.&lt;/p&gt;

&lt;p&gt;Dentre as funcionalidades podemos citar:&lt;/p&gt;

&lt;h3&gt;
  
  
  Service Discovery
&lt;/h3&gt;

&lt;p&gt;Que permite que outros serviços "descubram" facilmente a rota dos serviços que precisam acessar&lt;/p&gt;

&lt;p&gt;Mais conhecidos do Spring Cloud:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://spring.io/projects/spring-cloud-netflix"&gt;Spring Cloud Netflix Eureka&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://spring.io/projects/spring-cloud-consul"&gt;Spring Cloud Consul&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Gateway
&lt;/h3&gt;

&lt;p&gt;Tem o papel de ser um intermediário nas requisições para outros serviços.&lt;/p&gt;

&lt;p&gt;Mais conhecidos do Spring Cloud:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://spring.io/projects/spring-cloud-gateway"&gt;Spring Cloud Gateway&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://spring.io/guides/gs/routing-and-filtering/"&gt;Zuul&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Config server
&lt;/h3&gt;

&lt;p&gt;Permite armazenar configurações de aplicações de modo centralizado fora da aplicação (por ex, em um repositório que centralize todas as configurações de todos os microsserviços.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://spring.io/projects/spring-cloud-config"&gt;Config Server&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Load Balancer
&lt;/h3&gt;

&lt;p&gt;É responsável por distribuir de forma eficiente o tráfego de requisições dentre as instâncias de um mesmo serviço.&lt;/p&gt;

&lt;p&gt;Mais conhecidos no Spring&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html"&gt;Ribbon&lt;/a&gt;&lt;br&gt;
&lt;a href="https://spring.io/guides/gs/spring-cloud-loadbalancer/"&gt;Spring Cloud Load Balancer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Feign
&lt;/h3&gt;

&lt;p&gt;Facilita a criação e utilização de Clients HTTP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/OpenFeign/feign_"&gt;Feign&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Circuit Breaker
&lt;/h3&gt;

&lt;p&gt;Facilita o acompanhamento e controle de falhas e altas taxas de latências entre os serviços.&lt;/p&gt;

&lt;p&gt;Mais conhecidos no Spring: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://spring.io/guides/gs/circuit-breaker/"&gt;Hystrix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/resilience4j/resilience4j"&gt;Resilience4J&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Referências e dicas de onde estudar mais sobre: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/pt/microservices/"&gt;O que são microsserviços?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://spring.io/projects/spring-cloud"&gt;Spring Cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=aO3W-lYnw-o"&gt;The Beginner’s Guide To Spring Cloud - Ryan Baxter&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=hgp6dlJJaCI"&gt;Introduction to Spring Cloud in 10 Minutes&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=RocBZk2V8xM"&gt;Microservices com Spring Cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=v8CsnghDA2g&amp;amp;list=PLO0KWyajXMh4u-DhB7bXoRQ21rfkF_cSU&amp;amp;index=1"&gt;Spring Cloud | Introduction | Simple Programming&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=y8IQb4ofjDo&amp;amp;list=PLqq-6Pq4lTTZSKAFG6aCDVDP86Qx4lNas"&gt;01 Agenda - Spring Boot Microservices Level&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=o8RO38KbWvA&amp;amp;list=PLqq-6Pq4lTTbXZY_elyGv7IkKrfkSrX5e&amp;lt;br&amp;gt;%0Ahttps://www.youtube.com/watch?v=upoIwn4rWCo&amp;amp;list=PLqq-6Pq4lTTaoaVoQVfRJPqvNTCjcTvJB&amp;amp;index=1"&gt;1 Agenda and prerequisites - Spring Boot Microservices Level 2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=T36Usw_QbP0"&gt;Microservices Architecture - What is Service Discovery with Eureka?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=GboiMJm6WlA"&gt;What is service discovery really all about? - Microservices Basics Tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=41SmBj16u8k&amp;amp;list=PLmySAPXhfGyCovxvqpndBQaNm5SRDsBuC"&gt;Spring Cloud Service Discovery: Netflix Eureka Server&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.baeldung.com/spring-cloud-netflix-eureka"&gt;Spring Cloud Netflix Eureka Baeldung&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/swlh/spring-cloud-service-discovery-with-eureka-16f32068e5c7"&gt;Service Discovery com o Eureka&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=6aG0xFpeNFw"&gt;How to configure SpringCloud Zuul – Routing and Filtering using SpringBoot | Java Techie&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ZoTsZPZiPVw"&gt;Spring Boot Microservices 03 - Service discovery Eureka e Gateway Zuul&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.baeldung.com/spring-cloud-gateway"&gt;Spring Cloud Gateway Baeldung&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.devglan.com/spring-cloud/spring-cloud-gateway-example"&gt;Spring Cloud Gateway DevGlan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=KP3xJTb5lME&amp;amp;list=PLO0KWyajXMh4u-DhB7bXoRQ21rfkF_cSU&amp;amp;index=6"&gt;Spring Cloud | Cloud Config Server | Simple Programming&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLTyWtrsGknYeOJHtd3Ll93GRf28hrjlHV"&gt;What is Spring Cloud? | Tech Primers&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=_MMf2SvNqxo"&gt;Spring Cloud Feign - Declarative REST Client&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=mJ8JSach2P4"&gt;11 Understanding the circuit breaker pattern - Spring Boot Microservices Level 2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=s5-leUCti5o"&gt;Spring Tips: Spring Cloud Circuit Breaker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alguma dúvida ou sugestão? Deixa aqui nos comentários :)&lt;/p&gt;

</description>
      <category>java</category>
      <category>microsservices</category>
      <category>spring</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>[Série do Instagram - Primeiros passos como backend] Programação orientada a objetos</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Mon, 25 Jan 2021 11:07:27 +0000</pubDate>
      <link>https://dev.to/kamilacode/serie-do-instagram-primeiros-passos-como-backend-programacao-orientada-a-objetos-2c5m</link>
      <guid>https://dev.to/kamilacode/serie-do-instagram-primeiros-passos-como-backend-programacao-orientada-a-objetos-2c5m</guid>
      <description>&lt;p&gt;Olar, no &lt;a href="https://dev.to/kamilahsantos/serie-do-instagram-primeiros-passos-como-backend-logica-de-programacao-2ahb"&gt;primeiro artigo&lt;/a&gt; dessa série listei os posts sobre lógica de programação que escrevi como parte da série, e nesse artigo vamos rever os posts sobre orientação a objetos da última semana:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CJ52jBTAmhv/"&gt;Primeiros passos como backend #5 -  Objeto, atributo, método, o que é isso? &lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CJ8auVRAYkv/"&gt;Primeiros passos como backend #6 -  O que é programação orientada a objetos &lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CJ_W78XAFdN/"&gt;Primeiros passos como backend #7 -  O que é abstração?&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CKCEHcyACrp/"&gt;Primeiros passos como backend #8 -  O que é encpasulamento?&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CKOcqJ_goIX/"&gt;Primeiros passos como backend #9 -  O que é herança?&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CKZEOY6gMJk/"&gt;Primeiros passos como backend #10 -  O que é polimorfismo?&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Algumas recomendações para aprender mais sobre programação orientada a objetos:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=KlIL63MeyMY&amp;amp;list=PLHz_AreHm4dkqe2aR0tQK74m8SFe-aGsY"&gt;Curso de poo - Curso em vídeo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=dG7LlYne2VA"&gt;O que é Programação Orientada a Objetos - Conceitos Básicos de POO - Bóson Treinamentos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=qiGTRJlCnlA"&gt;Abstração, Herança e Polimorfismo a base de um bom código&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=LnORjqZUMIQ&amp;amp;list=PLGxZ4Rq3BOBq0KXHsp5J3PxyFaBIXVs3r"&gt;Curso de Java - Loiane Gronner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=vkLEVgPGcyo"&gt;ORIENTAÇÃO A OBJETOS em 8 minutos: Encapsulamento - DevMedia&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Até o próximo artigo :D&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>java</category>
      <category>oop</category>
    </item>
    <item>
      <title>[Série do Instagram - Primeiros passos como backend] Lógica de Programação</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Sat, 09 Jan 2021 15:05:13 +0000</pubDate>
      <link>https://dev.to/kamilacode/serie-do-instagram-primeiros-passos-como-backend-logica-de-programacao-2ahb</link>
      <guid>https://dev.to/kamilacode/serie-do-instagram-primeiros-passos-como-backend-logica-de-programacao-2ahb</guid>
      <description>&lt;p&gt;Olar, recentemente iniciei uma série de posts no instagram com conteúdos e dicas de estudos para quem quer começar a carreira de backend, focando principalmente em Java e Spring (mais detalhes nesse &lt;a href="https://www.instagram.com/p/CJGUVXigWuR/?utm_source=ig_web_copy_link"&gt;post&lt;/a&gt;), semanalmente estarei escrevendo um artigo para centralizar os posts da semana e indicar alguns links complementares de estudo, a primeira semana foi sobre lógica de programação e tivemos quatros posts sobre esse assunto:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CJn09rwAdwi/"&gt;Primeiros passos como backend #1 -  Lógica de programação parte 1&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Nesse post expliquei o que é lógica de programação, o que são algoritmos e como podemos representar um algoritmo.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CJn09rwAdwi/"&gt;Primeiros passos como backend #2 -  Lógica de programação parte 2&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Nesse post expliquei o que é uma variável, o que é uma constante e como funcionam os desvios condicionais&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CJs7OW6gdvN/"&gt;Primeiros passos como backend #3 -  Lógica de programação parte 3&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Nesse post falei sobre o "escolha-caso" e sobre laços de repetição&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.instagram.com/p/CJviQy7AtrQ/"&gt;Primeiros passos como backend #4 -  Lógica de programação parte 4&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Nesse post indiquei alguns canais no youtube para aprender mais sobre lógica de programação:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLHz_AreHm4dmSj0MHol_aoNYCSGFqvfXV"&gt;Curso em vídeo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=41ubXTEPFO0&amp;amp;list=PLucm8g_ezqNpYL-z-lutCuBplhx9aqkdd"&gt;Bóson Treinamentos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ycyL5CqZoUo&amp;amp;list=PL62G310vn6nH-uBTKREcUWDkOi2Q9n4OZ"&gt;Dev Dojo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UCH4s4ek5zqNvct5oy9_jd_g"&gt;Stanford algorithms&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Algumas recomendações para aprender mais sobre lógica de programação:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.schoolofnet.com/curso/frontend/logica-de-programacao/logica-de-programacao/"&gt;Lógica de Programação - school of net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.softblue.com.br/site/curso/id/6/CURSO+LOGICA+DE+PROGRAMACAO+BASICO+ON+LINE+LO06"&gt;Lógica de programação -  softblue&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://s3.amazonaws.com/algaworks-assets/ebooks/algaworks-livro-programacao-para-iniciantes-v1.1.pdf"&gt; Lógica de programacao com java - algaworks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=lxb567HEn8k&amp;amp;list=PL1dUY2RYa2RidB3B134ywckDyf-FOwbv7"&gt;Lógica de Programação com JS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se conhecer mais algum material gratuito sobre lógica de programação deixa aqui nos comentários :)&lt;/p&gt;

&lt;p&gt;Segunda-feira iremos começar a falar de orientação a objetos, já segue o perfil lá no &lt;a href="https://www.instagram.com/kamila_code/"&gt;instagram&lt;/a&gt; para não perder nenhum conteúdo :)&lt;/p&gt;

&lt;p&gt;Até o próximo post :)&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>java</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Retrospectiva (?) das palestras que tive a oportunidade de realizar em 2020 &lt;3</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Mon, 21 Dec 2020 10:59:07 +0000</pubDate>
      <link>https://dev.to/kamilacode/retrospectiva-das-palestras-que-tive-a-oportunidade-de-realizar-em-2020-3-20cf</link>
      <guid>https://dev.to/kamilacode/retrospectiva-das-palestras-que-tive-a-oportunidade-de-realizar-em-2020-3-20cf</guid>
      <description>&lt;p&gt;Olar, tudo bem?&lt;/p&gt;

&lt;p&gt;Nesse artigo vou reunir as palestras que realizei em 2020 (não seguindo a ordem cronológica rs), a ideia é ajudar alguém que esteja querendo aprender sobre algum tema que eu apresentei, rever algum vídeo ou slide de algumas delas e também para eu mesma ter elas concentradas em um só lugar slide e vídeo ( a maioria que o vídeo for público) para consultar algum conteúdo  , vamos lá?:&lt;/p&gt;

&lt;h3&gt;
  
  
  Java Global Summit - Evolution of java: from object orientation to reactive applications with Webflux
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/java-global-summit-evolution-of-java-from-object-orientation-to-reactive-applications-with-webflux" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/java-global-summit-evolution-of-java-from-object-orientation-to-reactive-applications-with-webflux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/Spring-Webflux-API-Java-Global-Summit" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/Spring-Webflux-API-Java-Global-Summit&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Jlove Conference - Clean Architecture? Clean Code? Refactoring? Tests? What does this change in my code?
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/jlove-conf-clean-architecture-clean-code-refactoring-tests-what-does-this-change-in-my-code" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/jlove-conf-clean-architecture-clean-code-refactoring-tests-what-does-this-change-in-my-code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/jloveconf-cleanarchitecture" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/jloveconf-cleanarchitecture&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Codecon 2020 - o seu código não é só pra você entender
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/codecon-2020-o-seu-codigo-nao-e-so-pra-voce-entender" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/codecon-2020-o-seu-codigo-nao-e-so-pra-voce-entender&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Developers Conference Porto Alegre Online - Paradigma reativo? Por dentro da programação reativa com Spring Webflux e Projeto Reactor - Trilha Design de Código e XP
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/thedevconf-2020-paradigma-reativo-por-dentro-da-programacao-reativa-com-spring-webflux-e-projeto-reactor-trilha-design-de-codigo-e-xp" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/thedevconf-2020-paradigma-reativo-por-dentro-da-programacao-reativa-com-spring-webflux-e-projeto-reactor-trilha-design-de-codigo-e-xp&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  CLOUD-CONFERENCE-DAY -  Spring Cloud
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/cloud-conference-day-spring-cloud" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/cloud-conference-day-spring-cloud&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  [LIVE SOUJAVA] Sistema de recomendação em Java - Kamila Santos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=Lie1q9f6S6I" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FLie1q9f6S6I%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/02-sistema-de-recomendacao-com-java" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/02-sistema-de-recomendacao-com-java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/sistema-de-recomendacao-java-mahout" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/sistema-de-recomendacao-java-mahout&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AngularSP Talks #26 Especial mês das Mulheres -  RXJS, Lifecycle Hooks e Event Binding de um Angular Diferente
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=PyljlF7dAFg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FPyljlF7dAFg%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/angular-sp-rxjs-lifecyclehooks-e-eventbinding-de-um-angular-diferente" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/angular-sp-rxjs-lifecyclehooks-e-eventbinding-de-um-angular-diferente&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Springboot, APIs e carreira em tecnologia com Kamila Santos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=1VllPZYn6RI" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2F1VllPZYn6RI%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/live-coding-dio-api-de-herois-com-spring-webflux" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/live-coding-dio-api-de-herois-com-spring-webflux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/Heroes-SpringWebflux-API" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/Heroes-SpringWebflux-API&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  {LIVE} WoMakersCode: Java Reativo - Dia 1
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=KLsM_LRYzoM" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FKLsM_LRYzoM%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  {LIVE} WoMakersCode: Java Reativo - Dia 2
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=Qzp7gDnyGzQ" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FQzp7gDnyGzQ%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Meetup na Ame - 24º Cloud Girls: "The Future is Female" -  Sistema de recomendação em Java
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=Ir5XuwChu7k" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FIr5XuwChu7k%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/2020-ia-com-java" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/2020-ia-com-java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/sistema-de-recomendacao-java-mahout" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/sistema-de-recomendacao-java-mahout&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  [Online] Nerdgirlz #35 - Desenvolvimento Back End - Junit: melhores práticas para testes unitários nas suas aplicações Java
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=9QRQx5sZmCM" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2F9QRQx5sZmCM%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/nerdgirlz-junit-melhores-praticas-para-testes-unitarios-nas-suas-aplicacoes-java" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/nerdgirlz-junit-melhores-praticas-para-testes-unitarios-nas-suas-aplicacoes-java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/springboot-junit-nerdgirlz-demo" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/springboot-junit-nerdgirlz-demo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Semana UP - Seu código não é só para você entender!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=0xX2iWh_jDU" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2F0xX2iWh_jDU%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/2020-d0013e50-afdf-4e9c-b411-7f22d2f3d64c" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/2020-d0013e50-afdf-4e9c-b411-7f22d2f3d64c&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Carreira Fullstack com Java, Spring e Angular - Kamila Santos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=_2gRnfJeyMM" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2F_2gRnfJeyMM%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/live-coding-spring-boot-plus-angular" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/live-coding-spring-boot-plus-angular&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo front: &lt;a href="https://github.com/Kamilahsantos/Client-Angular-Live-Coding-Dio" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/Client-Angular-Live-Coding-Dio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo backend: &lt;a href="https://github.com/Kamilahsantos/Crud-Spring-liveCoding-Dio" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/Crud-Spring-liveCoding-Dio&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Java: da orientação a objetos a aplicações reativas com Webflux
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=PFk041sfYnc" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FPFk041sfYnc%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/java-da-orientacao-a-objetos-a-aplicacoes-reativas-com-webflux" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/java-da-orientacao-a-objetos-a-aplicacoes-reativas-com-webflux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🦄 Live Unicorntech - Programação reativa com Java: Primeiros passos com WebFlux
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=-BfjQGUlz-Y" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2F-BfjQGUlz-Y%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/unicorn-tech-programacao-reativa-com-java-primeiros-passos-com-webflux" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/unicorn-tech-programacao-reativa-com-java-primeiros-passos-com-webflux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conhecendo Spring Cloud Netflix - Kamila Santos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=V76M1xlsvRo" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FV76M1xlsvRo%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/dio-expert-talks-spring-cloud-netflix" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/dio-expert-talks-spring-cloud-netflix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/Service-Discovery-Eureka-Server-DIO" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/Service-Discovery-Eureka-Server-DIO&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Programação Reativa com Java: Primeiros passos com WebFlux
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=H1dz8g15ZEw" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FH1dz8g15ZEw%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/bsb-primeiros-passos-com-webflux" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/bsb-primeiros-passos-com-webflux&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  "Design Thinking e a Maratona de Aplicá-lo em Hackathons" - Palestra de Kamila Santos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=lo1RTdiuRYk" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2Flo1RTdiuRYk%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/design-thinking-e-a-maratona-de-aplica-lo-em-hackathons-ab771dbd-22d4-4fe9-b4be-01eb8c073ee9" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/design-thinking-e-a-maratona-de-aplica-lo-em-hackathons-ab771dbd-22d4-4fe9-b4be-01eb8c073ee9&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Painel sobre o começo na carreira de Tecnologia
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=zM_oWCrcYvE" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FzM_oWCrcYvE%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Perifacode + B2W Meetups | Start n' Tech | ONLINE - Back End
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=usSclG0qgJ0" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FusSclG0qgJ0%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  TheFemTech e Ame Digital - Primeiros passos na carreira de backend
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=eArdd30tLu8" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FeArdd30tLu8%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/the-femtech-plus-ame-primeiros-passos-na-carreira-de-backend" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/the-femtech-plus-ame-primeiros-passos-na-carreira-de-backend&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/Divas-Reactive-App-The-Fem-Tech" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/Divas-Reactive-App-The-Fem-Tech&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Elixir Brasil 2020 - Soft skills
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=bG8J9I2XPso" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FbG8J9I2XPso%2F0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/elixir-brasil-2020-soft-skills" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/elixir-brasil-2020-soft-skills&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Women Tech Makers Rio de Janeiro - O seu código não é só para você entender
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/2020-fda7d87e-755d-4147-8def-5fe878763572" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/2020-fda7d87e-755d-4147-8def-5fe878763572&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Dev Conf Floripa - Melhorando a performance e legibilidade de aplicações Java com Spring Web Flux
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/tdc-floripa-melhorando-a-performance-e-legibilidade-de-aplicacoes-java-com-spring-web-flux" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/tdc-floripa-melhorando-a-performance-e-legibilidade-de-aplicacoes-java-com-spring-web-flux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Jornada Java Summit: Java: da orientação a objetos a aplicações web reativas
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://speakerdeck.com/kamilahsantos/jornada-java-java-da-orientacao-a-objetos-a-aplicacoes-web-reativas" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/jornada-java-java-da-orientacao-a-objetos-a-aplicacoes-web-reativas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi" rel="noopener noreferrer"&gt;https://github.com/Kamilahsantos/thedevconf-demo-SpringWebFlux-SuperHeroesApi&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GUOB Tech Day - SPRING WEBFLUX
&lt;/h3&gt;

&lt;p&gt;Slides: &lt;a href="https://speakerdeck.com/kamilahsantos/guob-tech-day-spring-webflux" rel="noopener noreferrer"&gt;https://speakerdeck.com/kamilahsantos/guob-tech-day-spring-webflux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para inserir os vídeos dentro do artigo utilizei essa ferramenta: &lt;a href="http://embedyoutube.org/" rel="noopener noreferrer"&gt;http://embedyoutube.org/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Até a próxima :)&lt;/p&gt;

</description>
      <category>java</category>
      <category>spring</category>
      <category>speaker</category>
    </item>
    <item>
      <title>Hacktoberfest : conheça os projetos open-source da WoMakersCode</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Wed, 14 Oct 2020 13:14:34 +0000</pubDate>
      <link>https://dev.to/womakerscode/hacktoberfest-conheca-os-projetos-open-source-da-womakerscode-2doj</link>
      <guid>https://dev.to/womakerscode/hacktoberfest-conheca-os-projetos-open-source-da-womakerscode-2doj</guid>
      <description>&lt;p&gt;Todos os anos, no mês de outubro ocorre a &lt;a href="https://hacktoberfest.digitalocean.com/"&gt;Hacktoberfest&lt;/a&gt;, um evento que visa engajar mais pessoas a contribuirem para o open-source (para participar basta se cadastrar no link deles acima), e nós da WomakersCode não iríamos ficar fora dessa!&lt;/p&gt;

&lt;p&gt;Temos diversos repositórios públicos e abertos para contribuição no nosso Github, com conteúdos sobre Workshops, tutoriais, dentre outros. Queremos que cada vez mais mulheres aprendam com esse conteúdo e você pode ajudar elas e ainda enriquecer seu currículo contribuindo com opensource.&lt;/p&gt;

&lt;p&gt;Não conhece muito sobre Git e Github? temos uma &lt;a href="https://dev.to/womakerscode/instalando-configurando-e-inicializando-o-git-no-linux-2m96"&gt;série de posts&lt;/a&gt;  aqui sobre isso!&lt;/p&gt;

&lt;p&gt;A seguir a lista de projetos abertos para contribuição:&lt;/p&gt;

&lt;p&gt;Guia de git e github: &lt;a href="https://github.com/WoMakersCode/git-e-github"&gt;https://github.com/WoMakersCode/git-e-github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curso de banco de dados: &lt;a href="https://github.com/WoMakersCode/banco-de-dados"&gt;https://github.com/WoMakersCode/banco-de-dados&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workshop de Pwa: &lt;a href="https://github.com/WoMakersCode/pwa-workshop"&gt;https://github.com/WoMakersCode/pwa-workshop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desafios de backend: &lt;a href="https://github.com/WoMakersCode/challenges-back-end"&gt;https://github.com/WoMakersCode/challenges-back-end&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desafios de frontend: &lt;a href="https://github.com/WoMakersCode/challenges-front-end"&gt;https://github.com/WoMakersCode/challenges-front-end&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desafios de lógica/algoritmos: &lt;a href="https://github.com/WoMakersCode/challenges-algorithms"&gt;https://github.com/WoMakersCode/challenges-algorithms&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React-bootcamp: &lt;a href="https://github.com/WoMakersCode/react-bootcamp"&gt;https://github.com/WoMakersCode/react-bootcamp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em cada repositório temos uma lista de issues disponíveis e uma guia de contribuição, qualquer dúvida podem entrar em contato conosco!!&lt;/p&gt;

&lt;p&gt;Vamos juntas!&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>womenintech</category>
      <category>github</category>
    </item>
    <item>
      <title>Spring Webflux - Reactive Java Applications - Part 2</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Wed, 29 Jul 2020 05:19:32 +0000</pubDate>
      <link>https://dev.to/kamilacode/spring-webflux-reactive-java-applications-part-2-5b0l</link>
      <guid>https://dev.to/kamilacode/spring-webflux-reactive-java-applications-part-2-5b0l</guid>
      <description>&lt;p&gt;In &lt;a href="https://dev.to/kamilahsantos/spring-webflux-reactive-java-applications-part-1-330j"&gt;part 1&lt;/a&gt; we talk about some concepts used in reactive programming, now, in part 2 we will understand the reason for Webflux was created and how its architecture works :)&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Spring WebFlux?
&lt;/h3&gt;

&lt;p&gt;Spring WebFlux can be defined as a “parallel” version to the already known and widely used Spring MVC, with the main difference being the support for reactive NIO streams and for supporting the concept of backpressure and with Netty server coming by default embedded in its architecture.&lt;/p&gt;

&lt;p&gt;Since version 5.0 of the Spring Framework we have a reactive part in addition to the Servlet structure that already existed, each module of these is optional, you can use the Servlet part to reactive part or even both in your applications.&lt;/p&gt;

&lt;p&gt;This can be best exemplified through the image below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffbqt3f4b69s1cqfkckhr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffbqt3f4b69s1cqfkckhr.png" alt="Spring Framework" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Webflux is in the "reactive part" of the stack, where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;instead of servlet we work with Netty / Undertow as a server;&lt;/li&gt;
&lt;li&gt;We do not use the Servlet API (which is blocking) and we use Reactive Streams;&lt;/li&gt;
&lt;li&gt;we started using router functions instead of @Controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is important to note that we can use only one or even both architectures, using the best of both.&lt;/p&gt;

&lt;p&gt;Spring Webflux was developed due to the need for non-blocking applications that were able to work with a small number of threads simultaneously and that could be run with a few hardware resources.&lt;/p&gt;

&lt;p&gt;In Servlet 3.1 an NIO API was provided, but its use does not match the rest of the API and all the concepts behind Servlet, which has blocking contracts like getPart and getParameter for example and their contracts were defined in a way synchronous using Filter and Servlet as an example.&lt;/p&gt;

&lt;p&gt;These factors were decisive for the development of a new API that would be used independently of the execution time and in a non-blocking way, which was possible with the servers that consolidated themselves in the asynchronous and non-blocking operation, for example Netty.&lt;/p&gt;

&lt;p&gt;Another reason is that WebFlux makes it easier to understand and use functional / reactive programming concepts. With the addition of functional features from Java 8 (such as lambda expressions, streams, Optional ...). In terms of style / programming model, Java 8 allowed Spring WebFlux to have functional endpoints and annotated controllers in the applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does it work?
&lt;/h3&gt;

&lt;p&gt;In the MVC model, requests work as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1lwr1vxl79tzdqtvzsln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1lwr1vxl79tzdqtvzsln.png" alt="Spring MVC" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The client makes a request, which is received by TomCat and controlled by the thread pool, this is passed on to the Dispatcher Servlet that dispatches that request to the corresponding endpoint in RequestMapping, which will be received at the Controller, which will handle the service and by end will return a response. This whole process occurs in a blocking way, that is, another request will only enter when the previous one is completed.&lt;/p&gt;

&lt;p&gt;In Webflux, this would be a little different:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fl8cujg2of1yecjgl7zgm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fl8cujg2of1yecjgl7zgm.png" alt="Spring WebFlux" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The client makes the request that goes to our non-blocking server (Netty), which inside it has an event loop that manages these requests, then it passes to the reactor-netty (which makes this interface reactive with the application), it passes to the dispatcher handler, which through functionals endpoints will generate this response, and, throughout this process, new requests can be made, as it is a non-blocking architecture.&lt;/p&gt;

&lt;p&gt;We can say that Spring WebFlux uses the best of the servlet stack along with its reactive features, as we can see in the image below the documentation of the &lt;a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html"&gt;Spring&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvzw71th9cu1iu5c9wgo5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvzw71th9cu1iu5c9wgo5.png" alt="Spring Mvc X Spring Webflux" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the MVC side we have imperative programming, JDBC / JPA and other blocking dependencies / processes.&lt;/p&gt;

&lt;p&gt;On the Spring Webflux side, we have funcitonal endpoints, event loop, Netty and some features that already existed in MVC but who in Webflux started to have greater support, such as Reactive Clients.&lt;/p&gt;

&lt;p&gt;This article introduced the reason for creating WebFlux and its differences from MVC, in the next article we will talk  about Project Reactor!&lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

</description>
      <category>spring</category>
      <category>webflux</category>
      <category>reactive</category>
      <category>java</category>
    </item>
    <item>
      <title>Spring Webflux - Reactive Java Applications - Part 1</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Wed, 18 Mar 2020 13:36:57 +0000</pubDate>
      <link>https://dev.to/kamilacode/spring-webflux-reactive-java-applications-part-1-330j</link>
      <guid>https://dev.to/kamilacode/spring-webflux-reactive-java-applications-part-1-330j</guid>
      <description>&lt;p&gt;In recent times reactive programming has been expanding more and more, it is already being addressed by several languages, but in Java is it something new for you? Then this series of articles is for you!&lt;/p&gt;

&lt;p&gt;In this series of articles I will address issues such as reactive programming, Spring Webflux, Project Reactor and Netty.&lt;/p&gt;

&lt;p&gt;In this first I will cover some general concepts before delving into each one of them, here we go:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem:
&lt;/h3&gt;

&lt;p&gt;We expect our applications to be scalable, we need to use resources more and more efficiently, latency time must be minimal, we need quick responses to our requests, we handle competing requests (each thread consumes a little memory), traditional APIs work in a synchronous and blocking way.&lt;/p&gt;

&lt;p&gt;To solve this, we had the creation of Callbacks and Futures:&lt;br&gt;
Callbacks are not easy to read and difficult to maintain, they are complex (they can form a hell callback), through which it is not possible to return any value.&lt;/p&gt;

&lt;p&gt;Future: returns an instance of the future type and it is difficult to scale for multiple asynchronous operations, as an alternative, from Java 8 came the Completable Future that supports functional and easy programming the use of multiple asynchronous operations, however, as nothing is perfect , is not a good option for asynchronous calls with multiple items.&lt;/p&gt;
&lt;h3&gt;
  
  
  Alternative way to develop APIs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Asynchronous and non-blocking&lt;/li&gt;
&lt;li&gt;Outside the on-demand thread model&lt;/li&gt;
&lt;li&gt;Decreases the number of threads created&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there comes reactive programming, ok, but what is different about it?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asynchronous and non-blocking&lt;/li&gt;
&lt;li&gt;Data flow as an event / message driven flow&lt;/li&gt;
&lt;li&gt;Code maintains functional programming style.&lt;/li&gt;
&lt;li&gt;BackPressure in data streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let us turn more attention to the data flow part:&lt;/p&gt;

&lt;p&gt;The data can come from databases, external files, integrated services, other applications, etc. For each item of this data source, we have an event or message that is triggered, after the execution of that event / message, we have an error message or that it was complete.&lt;br&gt;
For a request to save data for example, we have an onNext(Product) event:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;List &amp;lt;Product&amp;gt; products= productRepository.getAllProducts();&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;When we call data from a database for example, the call returns and for each item an onNext(Product) is launched and when we finish the listing we have an onComplete() event to inform that our request has ended.&lt;/p&gt;

&lt;p&gt;What if our request has an error?&lt;br&gt;
Instead of returning the onComplete() event, we will have the OnError() event and we will not have the expected content.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reactive Stream Specification
&lt;/h3&gt;

&lt;p&gt;is a set of specifications for the use of streams, created by companies like Pivotal and Netflix, among these specifications, we have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publishers: 
The Publisher interface is a provider of an unlimited number of elements in a sequential manner and publishes them according to the demand it receives from its Subscribers (I will explain what is next). The same publisher can serve several Subscribers dynamically at different times.
Publishers are our data sources.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;public interface Publisher&amp;lt;T&amp;gt;{&lt;br&gt;
public void subscribe  (Subscriber&amp;lt;? super T&amp;gt; s);&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscriber:
You only receive a call to OnSubscribe after you pass an instance of Subscriber to Publisher.subscribe (Subscriber). No notification will be received until Subscription.request (long) is called.
After the call is initiated:
One or more onNext(Object) calls are launched until the maximum number defined by Subscription.request(long) is reached.
A single onError(Throwable) error call or complete onComplete() request.
This demand can be signaled through Subscription.request(long) whenever the Subscriber instance can handle more.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;public interface Subscriber&amp;lt;T&amp;gt;{&lt;br&gt;
      public void onSubscribe(Subscription s);&lt;br&gt;
      public void onNext (T t);&lt;br&gt;
      public void onError(Throwable t);&lt;br&gt;
      public void onComplete();&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;And the Subscription:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;public interface Subscription{&lt;br&gt;
      public void request (long n);&lt;br&gt;
      public void cancel ();&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processor:
It represents a processing step, which is both a Subscriber and a Publisher that accepts both standards.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;public interface Processor &amp;lt;T,R&amp;gt; extends Subscriber &amp;lt;T&amp;gt;,Publisher &amp;lt;R&amp;gt;{&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;being that :&lt;br&gt;
T- type of element that is signaled to the Subscriber.&lt;br&gt;
R- type of element that is signaled to Publisher.&lt;/p&gt;

&lt;p&gt;This was the first part of the series of articles, in which we talked about some points and advantages of reactive programming, in the next I will address the reasons that led to the creation of Webflux and its differences from Spring MVC&lt;br&gt;
Questions or feedbacks?&lt;/p&gt;

&lt;p&gt;Below are some interesting references and content on this subject:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reactivemanifesto.org/"&gt; Reactive Manifest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reactive-streams.org/reactive-streams-1.0.0-javadoc/"&gt;Reactive Streams&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.baeldung.com/java-9-reactive-streams"&gt;Reactive Streams&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/build-reactive-restful-apis-using-spring-boot-webflux/"&gt;WebFlux Course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Image from: &lt;a href="https://docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/images/web-reactive-overview.png"&gt;https://docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/images/web-reactive-overview.png&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See you in the next articles!&lt;/p&gt;

</description>
      <category>spring</category>
      <category>webflux</category>
      <category>reactive</category>
      <category>java</category>
    </item>
    <item>
      <title>Do you have a minute or two to talk about Code Smells? - Part 1</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Sun, 15 Mar 2020 08:15:01 +0000</pubDate>
      <link>https://dev.to/kamilacode/do-you-have-a-minute-or-two-to-talk-about-code-smells-part-1-5il</link>
      <guid>https://dev.to/kamilacode/do-you-have-a-minute-or-two-to-talk-about-code-smells-part-1-5il</guid>
      <description>&lt;p&gt;Hello, you probably have already studied a lot about what are good programming practices, in this series of articles I will explain in more detail what NOT to DO in software development, explaining what are some Code Smells that maybe most of the developers people have ever done in your life.&lt;/p&gt;

&lt;p&gt;First of all, what are &lt;strong&gt;Code Smells&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;They are symptoms of superficial errors of a deeper problem in your code, you can see a more complete definition in this article by Martin Fowler: &lt;a href="https://martinfowler.com/bliki/CodeSmell.html"&gt;Code Smells&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This series of articles will demonstrate some Code Smells that can occur in different programming languages ​​and give some tips on how to solve them.&lt;br&gt;
In this first article I'm going to talk about Code Smell's &lt;strong&gt;Bloaters&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bloaters are codes, methods and classes that over time have taken on gigantic proportions that make the system difficult to maintain and scale. We usually only notice this type of smells when the system grows and makes a change or adds a new feature. These are the codes that are written “in the wrong way”, and become a technical debt that, over time, only increases.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The first example of a Code Smell of the Bloater type is &lt;strong&gt;Data Clumps&lt;/strong&gt; (Grouping of all):&lt;/p&gt;

&lt;p&gt;Often different parts of code contain identical groups of variables (configuration parameters, access routes, etc.), ideally these groups should be transformed into classes to be accessed without repeating these same parameters in various parts of the code.&lt;/p&gt;

&lt;p&gt;It usually occurs due to the lack of a modularized structure and frequent “copy and paste” throughout development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to fix this problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are some suggestions of what to do in these cases:&lt;/p&gt;

&lt;p&gt;Realize &lt;strong&gt;Preserve Whole Object&lt;/strong&gt; (when we have several values ​​of an object and pass it as a parameter to a method, we can pass it as an object containing this data, more details about this technique at: &lt;a href="https://refactoring.guru%20/%20preserve-whole-object"&gt;Preserve Whole Object&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Apply &lt;strong&gt;Introduce Parameter Object&lt;/strong&gt; (when your methods contain a group of repeated parameters, we can replace it with an object, somewhat similar to the previous one, more details at:&lt;a href="https://refactoring.guru/introduce-parameter-object"&gt;Introduce parameter object&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;If the repetition of these fields makes sense to be in a separate class to access this data through ** Extract Class ** (when one class is doing the work of two, it is not following the principle of single responsibility (SRP), we can extract these methods for a new class and insert all the methods and fields related to its functionality, more details at: &lt;a href="https://refactoring.guru/extract-class"&gt;Extract class&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This was a type of Code Smell, in the next articles I will address others, here are some references I used and study tips on the subject:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/bliki/CodeSmell.html"&gt;CodeSmell&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/refactoring/smells/bloaters"&gt;Bloaters&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/smells/data-clumps"&gt;Data Clumps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/bliki/DataClump.html"&gt;Data Clump&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/preserve-whole-object"&gt;Preserve Whole Object&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.com/catalog/preserveWholeObject.html"&gt;Preserve Whole Object&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/introduce-parameter-object"&gt;Introduce Parameter Object&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.com/catalog/introduceParameterObject.html"&gt;Introduce Parameter Object&lt;/a&gt;&lt;br&gt;
&lt;a href="https://refactoring.guru/extract-class"&gt;https://refactoring.guru/extract-class&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://scrutinizer-ci.com/docs/refactorings/extract-class"&gt;Extract Class&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.com/catalog/extractClass.html"&gt;Extract Class&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.infoq.com/br/presentations/principios-solid/"&gt;Solid Principles&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://engineering.contaazul.com/princ%C3%ADpios-solid-srp-e-sopa-de-letrinhas-d569fd0f80d9"&gt;SOLID&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cleancode</category>
      <category>codesmells</category>
      <category>refactoring</category>
      <category>designpatterns</category>
    </item>
    <item>
      <title>Spring Webflux - Aplicações reativas em Java - Parte 1</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Sun, 15 Mar 2020 06:41:34 +0000</pubDate>
      <link>https://dev.to/womakerscode/spring-webflux-aplicacoes-reativas-em-java-parte-1-ljf</link>
      <guid>https://dev.to/womakerscode/spring-webflux-aplicacoes-reativas-em-java-parte-1-ljf</guid>
      <description>&lt;p&gt;Nos últimos tempos a programação reativa tem se expandido cada vez mais,já está sendo abordada por diversas linguagens, mas em Java é algo novo para você? Então essa série de artigos é para você!&lt;/p&gt;

&lt;p&gt;Nesta série de artigos irei abordar assuntos como programação reativa, Spring Webflux, Projeto Reactor e Netty.&lt;/p&gt;

&lt;p&gt;Neste primeiro vou abordar alguns conceitos gerais antes de me aprofundar em cada um deles, vamos lá :)&lt;/p&gt;

&lt;h3&gt;
  
  
  O problema:
&lt;/h3&gt;

&lt;p&gt;Esperamos que nossas aplicações sejam escaláveis, precisamos usar os recursos de forma cada vez mais eficiente, o tempo de latência deve ser mínimo, precisamos de respostas rápidas à nossas solicitações, lidamos com solicitações concorrentes (cada thread consome um pouco de memória), APIs tradicionais funcionam de modo síncrono e bloqueante.&lt;/p&gt;

&lt;p&gt;Para solucionar isso, tivemos o surgimento dos Callbacks e dos Futures:&lt;br&gt;
Callbacks não tem uma leitura fácil e manutenção dificil, são complexos (podem formar um callback hell), por meio deles não é possível retornar nenhum valor.&lt;/p&gt;

&lt;p&gt;Future: retorna uma instância do tipo future e é dificil de escalar para múltiplas operações assíncronas,como alternativa, a partir do Java 8 surgiu o Completable Future que suporta a programação funcional e facílita o uso de múltiplas operações assíncronas, porém, como nada é perfeito, não é uma boa opção para chamadas assíncronas com multiplos items. &lt;/p&gt;
&lt;h3&gt;
  
  
  Forma alternativa de desenvolver APIs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Assíncrona e não bloqueante&lt;/li&gt;
&lt;li&gt;Fora do modelo de thread por solicitação&lt;/li&gt;
&lt;li&gt;Diminui o número de threads criadas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E ai entra a programação reativa, ok, mas o que ela tem de diferente?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;assíncrona e não bloqueante&lt;/li&gt;
&lt;li&gt;Fluxo de dados como um fluxo orientado a eventos/mensagens&lt;/li&gt;
&lt;li&gt;Código mantém estilo da programação funcional.&lt;/li&gt;
&lt;li&gt;BackPressure nos Streams de dados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voltemos uma atenção maior para a parte de fluxo de dados:&lt;br&gt;
Os dados podem vir de banco de dados, arquivos externos, serviços integrados, outras aplicações, etc, para cada item dessa fonte de dados, temos um evento ou mensagem que é disparado, após a execução desse evento/mensagem, temos uma mensagem de erro ou de que foi completa.&lt;br&gt;
Para um requisição para salvar dados por exemplo,temos um evento de onNext(Product):&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;List &amp;lt;Product&amp;gt; products= productRepository.getAllProducts();&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Quando chamamos os dados de uma banco de dados por exemplo,a chamada retorna e para cada item é lançado um onNext(Product) e ao terminarmos a listagem temos um evento de onComplete() para informar que nossa requisição terminou.&lt;/p&gt;

&lt;p&gt;E se a nossa requisição tiver algum erro?&lt;br&gt;
Em vez de retornar o evento onComplete() teremos o evento de OnError() e nao teremos o conteúdo esperado.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reactive Stream Specification
&lt;/h3&gt;

&lt;p&gt;Consiste de um conjunto de especificações para utilização de streams, criada por empresas como Pivotal e Netflix, dentre essas especificações, temos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publishers: 
A interface Publisher,é um provedor de um número ilimitado de elementos de forma sequencial e os publica de acordo com a demanda que recebe dos seus Subscribers (explicarei o que é a seguir). Um mesmo publisher pode atender a diversos Subscribers dinamicamente em diversos momentos.
Os publishers são as nossas fontes de dados.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;public interface Publisher&amp;lt;T&amp;gt;{&lt;br&gt;
public void subscribe  (Subscriber&amp;lt;? super T&amp;gt; s);&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscriber:
Recebe somente uma chamada para o OnSubscribe, depois que passar uma instância do Subscriber para Publisher.subscribe(Subscriber). Nenhuma notificação será recebida até que Subscription.request(long)  seja chamado. 
Depois que a chamada for iniciada:
Uma ou mais chamadas do onNext(Object) são lançadas até que o número máximo definido por Subscription.request (long) seja atingido.
Uma única chamada de erro onError(Throwable)  ou de que foi completa a requisição onComplete().
Essa demanda pode ser sinalizada através da Subscription.request (long) sempre que a instância do Subscriber puder lidar com mais.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;public interface Subscriber&amp;lt;T&amp;gt;{&lt;br&gt;
      public void onSubscribe(Subscription s);&lt;br&gt;
      public void onNext (T t);&lt;br&gt;
      public void onError(Throwable t);&lt;br&gt;
      public void onComplete();&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;E a Subscription:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;public interface Subscription{&lt;br&gt;
      public void request (long n);&lt;br&gt;
      public void cancel ();&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processor:
Representa uma etapa de processamento, que é tanto um Subscriber quanto um Publisher que aceita as normas de ambos.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;public interface Processor &amp;lt;T,R&amp;gt; extends Subscriber &amp;lt;T&amp;gt;,Publisher &amp;lt;R&amp;gt;{&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;sendo que :&lt;br&gt;
T- tipo de elemento que é sinalizado para o Subscriber.&lt;br&gt;
R- tipo de elemento que é sinalizado para o Publisher.&lt;/p&gt;

&lt;p&gt;Esta foi a primeira parte da série de artigos, na qual falamos sobre alguns pontos e vantagens da programação reativa, no pŕoximo irei abordar os motivos que levaram à criação do Webflux e suas diferenças do Spring MVC&lt;/p&gt;

&lt;p&gt;Dúvidas ou  feedbacks? &lt;/p&gt;

&lt;p&gt;Segue abaixo algumas referências e conteúdos interessantes sobre esse assunto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reactivemanifesto.org/"&gt; Manifesto Reativo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reactive-streams.org/reactive-streams-1.0.0-javadoc/"&gt;Streams Reativos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.baeldung.com/java-9-reactive-streams"&gt;Streams Reativos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/build-reactive-restful-apis-using-spring-boot-webflux/"&gt;Curso de WebFlux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>spring</category>
      <category>webflux</category>
      <category>java</category>
      <category>reactive</category>
    </item>
    <item>
      <title>TDD em Nodejs : conhecendo o Jest</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Wed, 05 Feb 2020 20:15:50 +0000</pubDate>
      <link>https://dev.to/womakerscode/tdd-em-nodejs-conhecendo-o-jest-b55</link>
      <guid>https://dev.to/womakerscode/tdd-em-nodejs-conhecendo-o-jest-b55</guid>
      <description>&lt;p&gt;Neste artigo, irei dar uma introdução ao TDD com os testes feitos em Jest e aplicá-los na fase inicial da construção de uma aplicação com Koa.js.&lt;br&gt;
Primeiramente, o que é TDD?&lt;br&gt;
No TDD, escrevemos os testes e desenvolvemos o código para que ele passe neste teste, ele se divide em três etapas:&lt;br&gt;
Vermelho : o teste vai falhar, porque não temos nenhuma lógica construída só as suítes e casos de teste.&lt;br&gt;
Verde: escreve o código para que passe no teste, baseada na descrição e no resultado esperado em cada um dos testes.&lt;br&gt;
Roxa (refatora): melhore o código que já passou nos testes, eliminando redundâncias e duplas responsabilidades em suas funcionalidades.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi0.wp.com%2Fblog.sciensa.com%2Fwp-content%2Fuploads%2F2017%2F08%2Ftdd_flow.gif%3Fresize%3D489%252C511" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi0.wp.com%2Fblog.sciensa.com%2Fwp-content%2Fuploads%2F2017%2F08%2Ftdd_flow.gif%3Fresize%3D489%252C511" alt="TDD"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Como adotar o TDD em um projeto?
&lt;/h2&gt;

&lt;p&gt;Os testes devem ser feitos de modo unitário, testando cada funcionalidade separadamente, como são executados automaticamente, não precisamos ficar abrindo a aplicação e testar manualmente cada uma dessas funcionalidades.&lt;br&gt;
Em testes manuais, deveríamos subir nossa aplicação e realizar cada caso de teste “na mão” e evidenciar cada resultado, em testes automáticos ele irá subir a aplicação, executar cada testes, exibir o resultado esperado e o que foi obtido SOZINHO.&lt;/p&gt;
&lt;h2&gt;
  
  
  Vantagens de adotar o TDD?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Qualidade de código&lt;/li&gt;
&lt;li&gt;Se um código não pode ser testado por uma máquina, talvez ele não esteja tão “limpo” e bem estruturado assim.&lt;/li&gt;
&lt;li&gt;Raciocínio&lt;/li&gt;
&lt;li&gt;Sabendo exatamente o que esperar de cada parte do seu código, você já desenvolve focado na responsabilidade de cada parte dele e inserindo o resultado que é exatamente esperado.
Segurança&lt;/li&gt;
&lt;li&gt;Em casos emergenciais, é possível em alguns casos recorrer aos testes para ver o que cada funcionalidade faz e executar a manutenção de forma mais rápida, sem ter que analisar o código inteiro.
-Trabalho em equipe&lt;/li&gt;
&lt;li&gt;A integração de novos membros na equipe é facilitada pelo uso de testes bem documentados para conhecer o seu sistema.&lt;/li&gt;
&lt;li&gt;Documentação&lt;/li&gt;
&lt;li&gt;Fazendo os testes antes do código, sempre que for lançada uma nova funcionalidade, ela já estará documentada antes de ser laçada, pelo método “convencional”, quando se faz a documentação após a conclusão da última versão da sua aplicação, temos o grande risco de esquecer de documentar algo e não terminar esta documentação até o lançamento na nova versão.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  O que vamos utilizar neste exemplo?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Node.js
&lt;/h3&gt;

&lt;p&gt;Pode ser descrito como o javascript server-side , trabalha de forma assíncrona, não bloqueante, orientado a eventos (fluxo é controlado por ações/requsições externas) e open-source.&lt;br&gt;
Ideal para aplicações real-time&lt;/p&gt;
&lt;h3&gt;
  
  
  KOA.js
&lt;/h3&gt;

&lt;p&gt;Desenvolvido pela equipe do Express, é uma versão “menor’ e com mais funcionalidades para aplicativos web e APIs, com suas funções assíncronas, pode eliminar retornos de chamadas e facilitar o tratamento dos erros. Por não usar middlewares em várias partes do código, torna os servidores mais rápidos e com código mais limpo.&lt;/p&gt;
&lt;h3&gt;
  
  
  Jest
&lt;/h3&gt;

&lt;p&gt;Criado pelo facebook, pode ser usado em Node, Javascript puro, React, Angular, Vue e outros frameworks.&lt;br&gt;
É bem completo, rápido e precisa de pouca configuração para usar, quando os testes não passam, fornece um contexto rico do porque falhou.&lt;br&gt;
Dependências a serem utilizadas na escrita dos testes:&lt;/p&gt;
&lt;h3&gt;
  
  
  Configuração dos testes
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install   jest --save-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;será responsável por configurar e executar nossos testes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install supertest --save-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o supertest nos fornece uma melhor abstração e compreensão do resultado e execução dos testes. agora escrevemos os testes.&lt;/p&gt;

&lt;p&gt;Crie uma pasta &lt;strong&gt;tests&lt;/strong&gt; nesta pasta irão nossas suítes de teste que o Jest irá executar, crie um arquivo routes.test.js com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//importa os módulos e aqruivos necessários
const request = require('supertest');
const server = require('../app.js');
const sayTDD = require('../helloJest');

//o que será executado antes de todos os testes
beforeAll(async () =&amp;gt; {
   console.log('Iniciando TDD com jest!');
});

//o que será executado após todos os testes
afterAll(() =&amp;gt; {
   //o server close irá encerrar nossa aplicação, evitando problemas da porta já estar em uso
server.close();
console.log('servidor fechado');
});


describe('inicio dos testes', () =&amp;gt; {
   //descrição do caso de testes
   test('acessa a rota da home e verifica o conteúdo que é exibido ', async () =&amp;gt; {
      //qual a rota que ele deve acessar e qual requisição deve fazer
      const response = await request(server).get('/');
      //qual o status esperado 
      expect(response.status).toEqual(200);
      //se todos esses passos passarem, verifica o conteúdo exibido dentro desta rota
      expect(response.text).toContain('&amp;lt;h1&amp;gt;Você está na Home!&amp;lt;/h1&amp;gt; &amp;lt;p&amp;gt; vamos começar os testes &amp;lt;/p&amp;gt;');

   });

   test('acessa a rota /tdd e então será apresentada a seguinte defiição de tdd:', async () =&amp;gt; {
      const response = await request(server).get('/TDD');
      expect(response.status).toEqual(200);
      expect(response.text).toContain('&amp;lt;h4&amp;gt;no tdd primeiro fazemos os testes e depois desenvolvemos o sistema para que ele passe nos testes&amp;lt;/h4&amp;gt;');
   });

   test('acessa a rota /koa e então será apresentada a seguinte definição de Koa.js', async () =&amp;gt; {
      const response = await request(server).get('/KOA');
      expect(response.status).toEqual(200);
      expect(response.text).toContain('&amp;lt;h4&amp;gt;O Koa é uma nova estrutura da Web criada pela equipe do Express, que pretende ser uma base menor, mais expressiva e mais robusta para aplicativos da Web e APIs&amp;lt;/h4&amp;gt;');

   });
   //aqui não iremos testar uma rota e sim o retorno de uma função.
   test('irá verificar o retorno da função saytdd', () =&amp;gt; {
      //é esperado que o retorno da função saytdd seja:
      expect(sayTDD()).toMatch('TDD é o Desenvolvimento Orientado por Testes');
   });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Testes modelados, agora vamos instalar as dependências necessárias para iniciarmos nosso desenvolvimento:&lt;/p&gt;

&lt;h3&gt;
  
  
  dependências da aplicação
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install koa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;vai gerenciar a nossa parte de rotas e requisições&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install nodemon -g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;quando se sobe a aplicação sem ser nos testes, o nodemon garante que toda alteração salva vai ser atualizada em tempo real na nossa aplicação sem necessitar parar o servidor e subir de novo para ver a alteração&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install koa-logger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nos fornece um status detalhado do que acontece na nossa aplicação, qual a rota acessada, o status obtido, o tempo de resposta e quantos dados foram transmitidos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; npm install koa-router
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;faz o direcionamento das rotas&lt;/p&gt;

&lt;p&gt;Criamos o arquivo app.js que será nosso servidor para que passe nos nossos testes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//esse arquivo é o nosso servidor
const Koa = require('koa');
const Router = require('koa-router');
const logger = require('koa-logger');
//iniciamos uma nova aplicação Koa
const app = new Koa();
//iniciamos as rotas
const router = new Router();

//habilitamos o uso do Koa Logger
app.use(logger());

//faz um get na rota home, o ctx é um espécie de método acessor que pega o contexto de uma parte do código e o next informa ao 
//middleware que após terminar esa operação pode ir para a próxima requisição de forma não bloqueante
router.get('/', (ctx, next) =&amp;gt; {
    ctx.body = '&amp;lt;h1&amp;gt;Você está na Home!&amp;lt;/h1&amp;gt; &amp;lt;p&amp;gt; vamos começar os testes &amp;lt;/p&amp;gt;';
});

router.get('/TDD', (ctx, next) =&amp;gt; {
    ctx.body = '&amp;lt;h4&amp;gt;no tdd primeiro fazemos os testes e depois desenvolvemos o sistema para que ele passe nos testes&amp;lt;/h4&amp;gt;';
   });

router.get('/KOA', (ctx, next) =&amp;gt; {
    ctx.body = '&amp;lt;h4&amp;gt;O Koa é uma nova estrutura da Web criada pela equipe do Express, que pretende ser uma base menor, mais expressiva e mais robusta para aplicativos da Web e APIs&amp;lt;/h4&amp;gt;';
   });
//cria as rotas
app.use(router.routes());
//permite todos os tipos de requisição,get,post,put,delete
app.use(router.allowedMethods());
//cria o servidor para rodar na porta 3000
const server = app.listen(3000);
//exporta o server para que seja possivel acessá-lo em outras partes do programa
module.exports = server;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O último caso de testes, era sobre retorno de uma função, vamos criá-la em um arquivo helloJest.js à parte do nosso server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sayTDD(){
    //criamos a função com exatamente o retorno que foi descrito nos testes
    return 'TDD é o Desenvolvimento Orientado por Testes'
}
module.exports = sayTDD;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de executarmos os testes, verifique se o seu package.json está semelhante à este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "koatesting",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "jest --watchAll",
    "dev": " nodemon app.js "
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "koa": "^2.7.0",
    "koa-logger": "^3.2.0",
    "koa-router": "^7.4.0"
  },
  "devDependencies": {
    "jest": "^24.1.0",
    "supertest": "^3.4.2"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Algumas observações:&lt;/p&gt;

&lt;h3&gt;
  
  
  Caso tenha algum erro com porta em uso, execute o seguinte comando no seu prompt como administrador:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;taskkill /F /IM node.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  para instalar as dependências
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  para rodar no modo de desenvolvimento:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  para executar os testes (jest):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  plugin para o vscode para facilitar a visualização dos resultados do teste, eu indico o plugin Jest Test Explorer
&lt;/h3&gt;

&lt;p&gt;Agora é só executar&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;dentro da pasta da aplicação e ver os testes passando com sucesso, experimente fazer algo errado mo código para ver como é apresentado o erro no teste (com o jest — watchAll, toda alteração salva já é testada automaticamente, não precisa executar este comando a cada alteração).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.sciensa.com/tdd-test-driven-development-guia-rapido/" rel="noopener noreferrer"&gt;http://blog.sciensa.com/tdd-test-driven-development-guia-rapido/&lt;/a&gt;&lt;br&gt;
&lt;a href="http://nodebr.com/o-que-e-node-js/" rel="noopener noreferrer"&gt;http://nodebr.com/o-que-e-node-js/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://koajs.com/#introduction" rel="noopener noreferrer"&gt;https://koajs.com/#introduction&lt;/a&gt;&lt;br&gt;
&lt;a href="https://jestjs.io/pt-BR/" rel="noopener noreferrer"&gt;https://jestjs.io/pt-BR/&lt;/a&gt;&lt;br&gt;
&lt;a href="http://tdd.caelum.com.br/" rel="noopener noreferrer"&gt;http://tdd.caelum.com.br/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://treinamento.nodebr.org/" rel="noopener noreferrer"&gt;https://treinamento.nodebr.org/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/koajs/logger" rel="noopener noreferrer"&gt;https://github.com/koajs/logger&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ZijianHe/koa-router" rel="noopener noreferrer"&gt;https://github.com/ZijianHe/koa-router&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/koajs/workshop" rel="noopener noreferrer"&gt;https://github.com/koajs/workshop&lt;/a&gt;&lt;br&gt;
&lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;https://jestjs.io/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/facebook/jest" rel="noopener noreferrer"&gt;https://github.com/facebook/jest&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>tdd</category>
      <category>jest</category>
      <category>javascript</category>
    </item>
    <item>
      <title>WoMakersCode oferece curso de programação gratuito para mulheres</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Mon, 06 Jan 2020 21:53:49 +0000</pubDate>
      <link>https://dev.to/womakerscode/womakerscode-oferece-curso-de-programacao-gratuito-para-mulheres-2b0l</link>
      <guid>https://dev.to/womakerscode/womakerscode-oferece-curso-de-programacao-gratuito-para-mulheres-2b0l</guid>
      <description>&lt;p&gt;O mercado de tecnologia possui mais de 160 mil postos de trabalho no Brasil, oferecendo oportunidades em diversas áreas, como Cloud Computing, Inteligência Artificial e Desenvolvimento de Software, mas ainda há uma grande desigualdade entre homens e mulheres na ocupação de vagas do setor.  De acordo com a pesquisa “Quem Coda o Brasil”, realizado pelo coletivo Preta Lab, 21% das equipes não possuem nenhuma mulher no time. &lt;/p&gt;

&lt;p&gt;A capacitação de mulheres é de extrema importância para aumentar a diversidade nas empresas e fomentar a inovação tecnológica. Pensando em acelerar a formação de mulheres na área de programação, a &lt;strong&gt;WoMakersCode, em parceria com a Fundação 1Bi e Stone&lt;/strong&gt;, lançou o React Bootcamp em São Paulo.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;React Bootcamp&lt;/strong&gt; irá começar no dia &lt;strong&gt;01 de Fevereiro&lt;/strong&gt;  e você tem até o dia &lt;strong&gt;19 de Janeiro&lt;/strong&gt; para realizar a sua inscrição. Este é um curso totalmente gratuito, com mais de 40 horas de formação, para todas as pessoas que se identificam como mulheres e que tenham conhecimentos básicos em HTML, CSS e JavaScript.&lt;/p&gt;

&lt;p&gt;O React é uma lib que vem se tornando cada vez mais popular no mercado de tecnologia, é uma lib com uma curva de aprendizado pequena, possui uma API de fácil manipulação e utiliza Javascript puro, não há a necessidade de aprender nenhuma sintaxe específica, durante o desenvolvimento utilizando React temos contato com conceitos como programação declarativa, programação funcional e imutabilidade.&lt;/p&gt;

&lt;p&gt;Aprendendo React fica bem mais fácil aprender React Native, que é uma tecnologia para desenvolvimento de aplicativos mobile, ampliando mais ainda suas possibilidades no mercado de trabalho.&lt;br&gt;
Quanto à suporte e comunidade, ele foi criado pelo Facebook e possui uma ampla comunidade ativa sempre desenvolvendo novas features e resolvendo eventuais problemas.É  utilizada por grandes empresas, como &lt;strong&gt;LivUp, Nubank, Boticário, C6 Bank, entre outras&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Durante o bootcamp, as alunas irão aprender sobre:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;-Revisão de Fundamentos de Desenvolvimento para Web e Lógica de Programação&lt;br&gt;
-Boas práticas em criação de projetos web&lt;br&gt;
-Trabalhando com ecossistema NPM &amp;amp; Node&lt;br&gt;
-Promises, protocolo HTTP e Requisições&lt;br&gt;
-Introdução ao ecossistema React &amp;amp; estruturação de projetos&lt;br&gt;
-Trabalhando com APIs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ao final, as alunas irão desenvolver projetos e terão a oportunidade de participar de uma feira de carreiras. Os projetos de conclusão do curso serão especiais, pois irão ajudar ONGs, projetos sociais e empreendedoras, previamente selecionados pela coordenação do curso.&lt;/p&gt;

&lt;p&gt;Como participar:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As interessadas, deverão realizar a sua inscrição no portal da WoMakersCode (&lt;a href="https://womakerscode.org/react-bootcamp"&gt;https://womakerscode.org/react-bootcamp&lt;/a&gt;) e realizar um teste de conhecimentos prévios até o dia 19 de Janeiro. Depois do encerramento das inscrições, as candidatas que forem pré-selecionadas serão chamadas para entrevistas online e no dia 27 de Janeiro, o resultado da seleção será anunciado.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>react</category>
    </item>
    <item>
      <title>Você tem um minuto ou dois, para falar de Code Smells? — Parte 1</title>
      <dc:creator>Kamila Santos Oliveira</dc:creator>
      <pubDate>Sat, 16 Nov 2019 18:39:45 +0000</pubDate>
      <link>https://dev.to/kamilacode/voce-tem-um-minuto-ou-dois-para-falar-de-code-smells-parte-1-4k66</link>
      <guid>https://dev.to/kamilacode/voce-tem-um-minuto-ou-dois-para-falar-de-code-smells-parte-1-4k66</guid>
      <description>&lt;p&gt;Olar, provavelmente você já tenha estudado muito sobre o que são boas práticas de programação, nesta série de artigos irei explicar de forma mais detalhada o que NÃO FAZER no desenvolvimento de software, explicando o que são alguns Code Smells que talvez grande parte das pessoas desenvolvedoras já tenha feito alguma vez na vida.&lt;/p&gt;

&lt;p&gt;Primeiramente, o que são &lt;strong&gt;Code Smells&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;São sintomas de erros superficiais de um problema mais profundo no seu código, você pode ver uma definição mais completa neste artigo do Martin Fowler: &lt;a href="https://martinfowler.com/bliki/CodeSmell.html"&gt;https://martinfowler.com/bliki/CodeSmell.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta série de artigos irá demonstrar alguns Code Smells que podem ocorrer em diversas linguagens de programação e dar umas dicas de como resolvê-los.&lt;br&gt;
Neste primeiro artigo vou falar do tipo &lt;strong&gt;Bloaters&lt;/strong&gt; do Code Smell:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bloaters são códigos,métodos e classes que com o decorrer do tempo tomaram proporções gigantescas que dificultam o sistema de ser manutenível e escalável. Geralmente só percebemos esse tipo de smells quando o sistema cresce e fazer uma alteração ou adicionar uma nova feature. São aqueles códigos que são escritos “da forma errada”, e viram um débito técnico que, com o decorrer do tempo só aumenta.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O primeiro exemplo de Code Smell do tipo Bloater é o &lt;strong&gt;Data Clumps&lt;/strong&gt; (Agrupamento de todos):&lt;/p&gt;

&lt;p&gt;Muitas vezes partes diferentes de código contém grupos idênticos de variáveis (parâmetros de configurações, rotas de acesso, etc), o ideal é que esses grupos sejam transformados classes para serem acessados sem a repetição desses mesmos parâmetros em várias partes do código.&lt;/p&gt;

&lt;p&gt;Geralmente ocorre pela falta de uma estrutura modularizada e frequentes “copy and paste” ao longo do desenvolvimento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como corrigir esse problema?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aqui algumas sugestões do que fazer nesses casos:&lt;/p&gt;

&lt;p&gt;Realizar &lt;strong&gt;Preserve Whole Object&lt;/strong&gt; (quando temos vários valores de um objeto e o passamos como parâmetro para um método, podemos passá-lo como um objeto contendo esses dados, mais detalhes sobre essa técnica em: &lt;a href="https://refactoring.guru/preserve-whole-object"&gt;https://refactoring.guru/preserve-whole-object&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Aplicar &lt;strong&gt;Introduce Parameter Object&lt;/strong&gt; (quando seus métodos contêm um grupo de parâmetros repetidos,podemos substituir ele por um objeto, um pouco semelhante ao anterior, mais detalhes em: &lt;a href="https://refactoring.guru/introduce-parameter-object"&gt;https://refactoring.guru/introduce-parameter-object&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Se a repetição desses campos fazer sentido estar em uma classe separada para acesso a esses dados através de &lt;strong&gt;Extract Class&lt;/strong&gt; (quando uma classe está fazendo o trabalho de duas, não está seguindo o princípio da responsabilidade única (SRP),podemos extrair esses métodos para uma nova classe e inserir todos os métodos e campos referentes a sua funcionalidade, mais detalhes em: &lt;a href="https://refactoring.guru/extract-class"&gt;https://refactoring.guru/extract-class&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Esse foi um tipo de Code Smell, nos próximos artigos irei abordar outros, segue algumas referências que utilizei e dicas de estudo sobre o assunto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/bliki/CodeSmell.html"&gt;https://martinfowler.com/bliki/CodeSmell.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/refactoring/smells/bloaters"&gt;https://refactoring.guru/refactoring/smells/bloaters&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/smells/data-clumps"&gt;https://refactoring.guru/smells/data-clumps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/bliki/DataClump.html"&gt;https://martinfowler.com/bliki/DataClump.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/preserve-whole-object"&gt;https://refactoring.guru/preserve-whole-object&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.com/catalog/preserveWholeObject.html"&gt;https://refactoring.com/catalog/preserveWholeObject.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/introduce-parameter-object"&gt;https://refactoring.guru/introduce-parameter-object&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.com/catalog/introduceParameterObject.html"&gt;https://refactoring.com/catalog/introduceParameterObject.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/extract-class"&gt;https://refactoring.guru/extract-class&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://scrutinizer-ci.com/docs/refactorings/extract-class"&gt;https://scrutinizer-ci.com/docs/refactorings/extract-class&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://refactoring.com/catalog/extractClass.html"&gt;https://refactoring.com/catalog/extractClass.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.infoq.com/br/presentations/principios-solid/"&gt;https://www.infoq.com/br/presentations/principios-solid/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://engineering.contaazul.com/princ%C3%ADpios-solid-srp-e-sopa-de-letrinhas-d569fd0f80d9"&gt;https://engineering.contaazul.com/princ%C3%ADpios-solid-srp-e-sopa-de-letrinhas-d569fd0f80d9&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cleancode</category>
      <category>badsmells</category>
      <category>refactoring</category>
    </item>
  </channel>
</rss>
