<?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>Forem: Ana Beatriz</title>
    <description>The latest articles on Forem by Ana Beatriz (@ananeridev).</description>
    <link>https://forem.com/ananeridev</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%2F214944%2F26cda0aa-f13e-463f-86f7-944991c52360.jpeg</url>
      <title>Forem: Ana Beatriz</title>
      <link>https://forem.com/ananeridev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ananeridev"/>
    <language>en</language>
    <item>
      <title>O que é API?</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Mon, 19 Jul 2021 14:44:32 +0000</pubDate>
      <link>https://forem.com/womakerscode/o-que-e-api-2dnj</link>
      <guid>https://forem.com/womakerscode/o-que-e-api-2dnj</guid>
      <description>&lt;p&gt;Sumario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sigla API&lt;/li&gt;
&lt;li&gt;O que de Fato uma API faz?&lt;/li&gt;
&lt;li&gt;Um exemplo da vida real&lt;/li&gt;
&lt;li&gt;Concluindo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estamos vivendo num mundo onde tudo é on-line e tudo se conecta de alguma forma, hoje é possível fazer pagamentos num piscar de olhos, mas uma questão sempre fica na mente de quem está iniciando na área: Como que tudo isso se conecta? Como que o dado passa do ponto A para o ponto   B.&lt;/p&gt;

&lt;p&gt;Na área de tecnologia mais especifícamente em desenvolvimento nos deparamos muito com essa palavra: API. &lt;/p&gt;

&lt;p&gt;Porém muitas pessoas desenvolvedoras que estão iniciando tem um pouco de dificuldade de realmente entender o propósito desta sigla de fato.&lt;/p&gt;

&lt;p&gt;Este é o objetivo desse artigo, clarear um pouco o conceito de API através de exemplos e de forma simples. Espero que ajude você!&lt;/p&gt;

&lt;h2&gt;
  
  
  A Sigla API
&lt;/h2&gt;

&lt;p&gt;Como dito na introdução API é um acrônimo vindo da língua inglesa na qual significa &lt;strong&gt;Interface&lt;/strong&gt; de &lt;strong&gt;Programação&lt;/strong&gt; de &lt;strong&gt;Aplicações&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;API acaba sendo um compilado de definições e protocolos que são usados no mundo do desenvolvimento e principalmente na integração de software de aplicações nas empresas, por isso é muito comum ouvir sobre API's em reuniões desde max-level corporativas até numa roda de conversa de amigos em T.I.&lt;/p&gt;

&lt;p&gt;Boas API's tornam mais fácil desenvolver um programa de um computador fornecendo todos os blocos de construção possíveis que são reunidos pelo programador.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que de fato uma API faz?
&lt;/h2&gt;

&lt;p&gt;API faz de maneira simplificada a conexão com a infraestrutura por meio do desenvolvimento de aplicações que são nativas em nuvem.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6sbeoeaey8sd92hwupp.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6sbeoeaey8sd92hwupp.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.redhat.com/pt-br/topics/api/what-are-application-programming-interfaces#:~:text=API%20%C3%A9%20um%20acr%C3%B4nimo%20em,economia%20de%20tempo%20e%20dinheiro." rel="noopener noreferrer"&gt;Imagem tirada do artigo "O que é API" - RedHat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API é nada mais nada menos do que o código escrito necessário para atingir o objetivo do ponto A ir ao ponto B.&lt;/p&gt;

&lt;p&gt;"Ao entrar no restaurante, o consumidor (site ou mobile), após conferir o cardápio e decidir o que vai querer comer, vai efetuar seu pedido para o Garçom (API). Em seguida, o Garçom vai até a cozinha (servidor) solicitar o pedido do Consumidor. Dependendo do gerenciamento da comunicação do pedido, estrutura da Cozinha, agilidade dos Cozinheiros, o tempo para obter a Entrega do Pedido, no caso o Prato (Resposta) será rápido.&lt;br&gt;
Também podemos adotar o cliente Delivery (Embarcado), no qual também poderá consumir os dados da nossa Cozinha através da mesma API."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mundoapi.com.br/materias/para-entender-o-que-e-api-o-garcom/" rel="noopener noreferrer"&gt;Trecho retirado do MundoAPI&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Um exemplo da vida real
&lt;/h2&gt;

&lt;p&gt;Um exemplo bem bacana que podemos tirar do mundo real é o ato de comprar passagens áreas online. &lt;br&gt;
O processo é basicamente o seguinte: &lt;br&gt;
Tu vai até o site da companhia áerea e insere o local de destino e no processo de compra insere suas informações como - Nome, Cpf, Infos do Cartão de Crédito e depois disso você tem acesso ao seu ingresso online sendo o mesmo já autenticado para validação no aeroporto.&lt;/p&gt;

&lt;p&gt;Mas o que acontece por debaixo dos panos entre inserir suas informações e receber sua passagem online?&lt;br&gt;
É isso mesmo, as API's estão aí!! E as mesmas estão trabalhando num tipo de bastidores e staff com os outros recursos e aplicações para te entregar um resultado final!&lt;/p&gt;

&lt;p&gt;Isso é possível por conta de uma ação chamada: &lt;strong&gt;Integração&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A integração de sistemas é uma técnica que promove uma grande melhoria no desempenho e na organização das operações de um negócio dentro de um software. ... Para permitir que as soluções de TI sejam empregadas para a circulação de informações entre vários setores, gestores podem implementar diversas técnicas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concluindo
&lt;/h2&gt;

&lt;p&gt;API's estao muito presentes no dia a dia de uma pessoa desenvolvedora, e esta tudo bem nao entender tudo de início, conforme as tasks vão sendo passadas pra você, intrísicamente você irá entender o papel das API's.&lt;/p&gt;

&lt;p&gt;Um dica de exercício é tentar criar uma regrinha de negócio: Biblioteca, Escola ou até mesmo um catálogo de músicas. E ir criando uma aquitetura para essa regra de negócio, você vai ver que com o tempo vai entender o papel da API.&lt;br&gt;
Obs.: Peça sempre um feedback para entender onde melhorar e como evoluir.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>development</category>
      <category>api</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Career in Programming and Music: What have I learned from all this? 👩🏽‍💻🎻</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Tue, 28 Apr 2020 16:55:02 +0000</pubDate>
      <link>https://forem.com/womakerscode/career-in-programming-and-music-what-have-i-learned-from-all-this-3a7h</link>
      <guid>https://forem.com/womakerscode/career-in-programming-and-music-what-have-i-learned-from-all-this-3a7h</guid>
      <description>&lt;p&gt;Hi guys ʕ•́ᴥ•̀ʔっ&lt;br&gt;
This is a slightly different article, it will not be a tutorial, without anything so technical, I will tell a little about my story more related to career and how music influenced me in all this.&lt;br&gt;
I will cover some topics such as: Impostor Syndrome, Persistence, Resilience and how all this makes me who I am today!&lt;/p&gt;

&lt;p&gt;If you identify yourself, or if so as I went through a trajectory and a story before entering the world of development, or for you who is at the beginning also comes along and good reading!&lt;/p&gt;

&lt;h1&gt;
  
  
  The Violin
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Like any dreamy girl always wanted to reach people, I didn't know how or when, but there was like this my personal goal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I came from a simple family, we never had all the money in the world, but my father always struggled to provide us with the best, so my parents always wanted me to be an influential person in the career in music (classical music), because my father followed this branch as second "job", and my mother deposited this dream in me. I accepted, didn't have enough resources and money, but I accepted..&lt;/p&gt;

&lt;p&gt;In search of violin schools, my mother found a program of the government of São Paulo called &lt;a href="https://www.facebook.com/gurisantamarcelina/"&gt;Guri Santa Marcelina&lt;/a&gt;, in which has a whole trajectory of music, where I would do two years of musical initiation and after that would choose the instrument that I would study for the rest of the years.&lt;/p&gt;

&lt;p&gt;So I choose Violion, for milion reason, between them the complexity.&lt;/p&gt;

&lt;p&gt;And there goes an 8-year-old girl start dreaming her story in music&lt;br&gt;
&lt;a href="https://i.giphy.com/media/dj7zP63Xms7sY/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/dj7zP63Xms7sY/giphy.gif" alt="Alice no país das maravilhas" width="513" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Study Routine
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;A 10 year old child having a study routine is complicated&lt;/em&gt;, but for a year I was totally excited to see my progress with an instrument, that at any age happens to people, the excitement of learning cheers us up. I studied five days a week, 3 hours a day, scales, symphonies from Beethoven, Mozart etc ... I loved classical music&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OQCd7YDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/tar8ov61hp6m00ccuquf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OQCd7YDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/tar8ov61hp6m00ccuquf.jpg" alt="Me child without the violin" width="720" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;. . .&lt;/p&gt;

&lt;p&gt;In programming it was always the same thing, I started my career at the age of 18, influenced by my father, I always paid for my own studies and what always encouraged me was to learn..&lt;/p&gt;

&lt;h1&gt;
  
  
  Impostor Syndrome
&lt;/h1&gt;

&lt;p&gt;I was 13 and still taking classes, when I was invited to audition for the São Paulo Orchestra (OSESP), there I would have a fixed violinist place, and guess what, I didn't go.&lt;/p&gt;

&lt;p&gt;I felt that a 13 year old girl should not be in an orchestra, that I was too young to have responsibilities, that I would be humiliated ... And since then I have been practicing the violin less and less.&lt;br&gt;
What I really miss, the chill in the belly to touch in front of people..&lt;/p&gt;

&lt;h1&gt;
  
  
  But what does a career as a developer have to do?
&lt;/h1&gt;

&lt;p&gt;We are driven by new things, new results, and we always give up when we think that it no longer serves us, I was like that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resilience:&lt;/strong&gt; resilience is a person's ability to deal with their own problems, overcome obstacles and not give in to pressure, whatever the situation.&lt;br&gt;
Nowadays I went back to studying the violin and other instruments as well: guitar, way of knowing that making mistakes is something necessary for growth was one of the best things I learned.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Self-knowledge:&lt;/strong&gt; - knowing my limits - Understanding that sleepless nights and nights will not make me better, not seeing in a bad way that I gave up playing in an orchestra, knowing that everything is training, is not a gift.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trust:&lt;/strong&gt; playing in front of an audience is more proof of confidence, we may not be sure, not entirely sure, but after several training sessions, playing the violin for an audience gave me a lot of confidence.&lt;br&gt;
Of course, I work in my confidence every day, but having had this experience since I was a little girl made me have enough courage to submit lectures, speak in front of an audience, and one of the main ones: speaking in English&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I could stay here for hours and hours writing about various things that music taught me, but I want this article to be an inspiration, I entered the world of technology was not for love, it was by choice and I played because I loved.&lt;br&gt;
And all of a sudden I stopped by little because I gave up playing in an orchestra made me think that I had never been good enough.&lt;/p&gt;

&lt;p&gt;And in programming we always think we're bad, we always see better projects than ours, and we don't think we're good enough, and it's all about self-knowledge and TRAINING!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/Y2c1ZjXVHRdSr1YojF/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/Y2c1ZjXVHRdSr1YojF/giphy.gif" alt="an boy training at skate" width="442" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The world of programming is very demanding, and the tendency to think we're bad is much greater, music taught me that there's always going to be someone better than me... What we need to overcome is ourselves, not others.&lt;/p&gt;

&lt;p&gt;So guys, having had a hard and loving experience with music early on was very good, I learned from an early age that I make a mistake, and that to be good I must practice, a lot I learned from small practice nowadays!&lt;/p&gt;

&lt;p&gt;The notes, the chords and the difficult climbs are the impossible tasks that I take, I need to practice to do well, and if I can not get information and train until I can!&lt;/p&gt;

&lt;h1&gt;
  
  
  Thanks and Let's be connected();
&lt;/h1&gt;

&lt;p&gt;I hope somehow I have helped you being a developer or not!&lt;br&gt;
If you identify with something you said, want to talk about, you can call me on social media or call me on the telegram @anabsneri&lt;/p&gt;

&lt;p&gt;Follow me 💫&lt;br&gt;
&lt;a href="https://twitter.com/anabneri"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/anabneri"&gt;Github&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/anabeatrizdev/"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;thanks, keep going, keep coding;&lt;/p&gt;

</description>
      <category>career</category>
      <category>programming</category>
      <category>leadership</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Deploy de uma aplicação Java reativa (Pokedéx) na Microsoft Azure + CosmosDB ✨</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Fri, 24 Apr 2020 20:01:43 +0000</pubDate>
      <link>https://forem.com/womakerscode/deploy-de-uma-aplicacao-java-reativa-pokedex-na-microsoft-azure-cosmosdb-4hf8</link>
      <guid>https://forem.com/womakerscode/deploy-de-uma-aplicacao-java-reativa-pokedex-na-microsoft-azure-cosmosdb-4hf8</guid>
      <description>&lt;p&gt;Liquid syntax error: 'raw' tag was never closed&lt;/p&gt;
</description>
      <category>azure</category>
      <category>azureapril</category>
      <category>java</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Passo a passo de como criar seu Pokedex com Spring WebFlux</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Tue, 21 Apr 2020 22:33:18 +0000</pubDate>
      <link>https://forem.com/womakerscode/criando-seu-pokedex-com-spring-webflux-mongodb-deploy-no-heroku-21f5</link>
      <guid>https://forem.com/womakerscode/criando-seu-pokedex-com-spring-webflux-mongodb-deploy-no-heroku-21f5</guid>
      <description>&lt;p&gt;Oláaa neste artigo você irá aprender a criar uma aplicação de Create, Read, Update e Delete usando Spring Webflux, com os dados salvos num banco MongoDB e por fim hospedado no Heroku!&lt;/p&gt;

&lt;p&gt;Repositório do projeto criado: &lt;a href="https://bit.ly/pokedex-reativo"&gt;https://bit.ly/pokedex-reativo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao final deste tutorial, você terá seu próprio pokedex, e poderá atualizar, deletar e criar seus pokémons no seu próprio repositório, com conceitos de reatividade usando &lt;strong&gt;Events Streams&lt;/strong&gt;, e &lt;strong&gt;Endpoints Funcionais&lt;/strong&gt; de forma simples e usual, um projeto bem bacana pra ter como portfólio!&lt;br&gt;
&lt;strong&gt;Curtiu? Então vamos lá... (ɔ◔‿◔)ɔ&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Setting up the project
&lt;/h1&gt;

&lt;p&gt;O que você precisa ter instalado antes de começar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JDK 8 ou 9 &lt;/li&gt;
&lt;li&gt;Uma IDE para o desenvolvimento, eu vou usar o &lt;a href="https://www.jetbrains.com/idea/download/#section=windows"&gt;IntelliJ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;O &lt;a href="https://id.heroku.com/login"&gt;Heroku CLI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Possuir o Maven 3 com suas variáveis de ambiente configuradas&lt;/li&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;É muito importante que você tenha o Maven 3, pois o Heroku CLI só roda nessa versão... Caso você não o tenha &lt;a href="https://maven.apache.org/download.cgi"&gt;Clique aqui&lt;/a&gt; e instale o maven na versão correta para fazer sua aplicação subir corretamente ;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora você deve acessar o site &lt;a href="https://start.spring.io/"&gt;Spring Initialzr&lt;/a&gt; , e selecionar as seguintes dependências:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Reactive Web&lt;/li&gt;
&lt;li&gt;Spring Data Reactive MongoDB &lt;/li&gt;
&lt;li&gt;Embedded MongoDB Database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No Group usaremos: &lt;code&gt;com.pokedex&lt;/code&gt;&lt;br&gt;
No Artifact: &lt;code&gt;reactiveweb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O package name é gerado automaticamente!&lt;/p&gt;

&lt;p&gt;Depois de gerado todas as variáveis seu Spring Initializr deve ficar assim:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--92F67prb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/ndiw8uy9vvfeceul7fjv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--92F67prb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/ndiw8uy9vvfeceul7fjv.PNG" alt="tela do spring initializier com todas as configurações que o usuário escolheu de acordo com o tutorial" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prontinho, agora é só clicar em &lt;code&gt;GENERATE CRTL+&lt;/code&gt;,   e o spring initializr irá gerar um arquivo em ZIP e você deve extrair esse arquivo num &lt;strong&gt;diretório que você consiga localizar depois&lt;/strong&gt;.&lt;/p&gt;
&lt;h1&gt;
  
  
  Importando o projeto
&lt;/h1&gt;

&lt;p&gt;Depois de extraído o arquivo você deve abrir sua IDE, no caso vou abrir o IntelliJ e cliar em &lt;strong&gt;import project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mjGnfZJo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/g3tk1n0gcb6vn5d3dh9j.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mjGnfZJo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/g3tk1n0gcb6vn5d3dh9j.PNG" alt="imagem do intellij idea logo que abrimos" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicando em &lt;strong&gt;import project&lt;/strong&gt; você verá todos seus diretórios, basta localizar onde estar o projeto que você baixou do Spring Initialzr, e importá-lo clicando em &lt;strong&gt;ok&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WwOrTmuy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/hlfcsqsqcln22dtmgsor.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WwOrTmuy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/hlfcsqsqcln22dtmgsor.PNG" alt="imagem dos diretórios no windows" width="632" height="836"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Irá aparecer uma janela com duas opções, você deverá escolher: &lt;strong&gt;Maven&lt;/strong&gt;, pois nosso projeto será importando através de um modelo que já existe&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DYHTg6k7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/cxkoq6fhda1a8ikc5626.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DYHTg6k7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/cxkoq6fhda1a8ikc5626.PNG" alt="escolhendo maven como projeto base" width="800" height="304"&gt;&lt;/a&gt;&lt;br&gt;
Agora você pode clicar em &lt;strong&gt;finish&lt;/strong&gt; e será carregado todo seu projeto com as variáveis de ambiente! :p&lt;/p&gt;
&lt;h1&gt;
  
  
  Configurando o pom.xml
&lt;/h1&gt;

&lt;p&gt;Para nossa aplicação subir corretamente, precisamos colocar na ordem correta a dependência do mongo embbeded, ele deve ficar antes do &lt;code&gt;&amp;lt;dependency&amp;gt;&lt;br&gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;&lt;br&gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-webflux&amp;lt;/artifactId&amp;gt;&lt;br&gt;
        &amp;lt;/dependency&amp;gt;&lt;/code&gt;, seu pom.xml ficará da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D8-vIMXX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/fp0i98m5sq2t66n9ui2b.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D8-vIMXX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/fp0i98m5sq2t66n9ui2b.PNG" alt="pom.xml" width="800" height="590"&gt;&lt;/a&gt;&lt;br&gt;
basta exlcuir o &lt;code&gt;&amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;/code&gt; e colocar a dependency do mongo embeded logo em seguida.&lt;/p&gt;

&lt;p&gt;Isso fará com que nossa aplicação suba na ordem correta, se essa dependency estiver depois igual estava, nossa aplicação não iria subir no servidor, pois a mesma não iria encontrar, sua depedendy deverá ficar da seguinte forma:&lt;br&gt;
             &lt;code&gt;&amp;lt;dependency&amp;gt;&lt;br&gt;
            &amp;lt;groupId&amp;gt;de.flapdoodle.embed&amp;lt;/groupId&amp;gt;&lt;br&gt;
            &amp;lt;artifactId&amp;gt;de.flapdoodle.embed.mongo&amp;lt;/artifactId&amp;gt;&lt;br&gt;
        &amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Subindo pela primeira vez a aplicação
&lt;/h1&gt;

&lt;p&gt;Vamos ver se nossa aplicação está subindo, no canal do youtube da womakerscode temos um vídeo onde explicamos sobre o servidor Netty, caso tenha alguma dúvida só dar uma &lt;a href="https://www.youtube.com/watch?v=KLsM_LRYzoM&amp;amp;t=859s"&gt;passadinha por lá&lt;/a&gt;.&lt;br&gt;
Subindo a aplicação iremos ver nosso servidor em ação na porta 8080.&lt;/p&gt;

&lt;p&gt;Vou colocar um "hello world womakerscode" padrão na classe main()&lt;/p&gt;

&lt;p&gt;Você verá que que no console nosso &lt;code&gt;System.out.println&lt;/code&gt; irá mostrar a mensagem, e também será sinalizado a porta que nossa aplicação está&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9IORVwts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1qjrvny5nhr7tsdw9v9d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9IORVwts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1qjrvny5nhr7tsdw9v9d.PNG" alt="console da aplicação" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Criando um Model
&lt;/h1&gt;

&lt;p&gt;Para realizarmos os testes no banco de dados precisamos que nossa aplicação tenha os dados para serem salvos, e também para que os métodos do MongoDB sejam encontrados. Nele ficará salvos nossas variáveis.&lt;/p&gt;

&lt;p&gt;Para criar o package clique com o botão direito em &lt;strong&gt;com.pokedex.reactiveweb&lt;/strong&gt; &amp;gt; New &amp;gt; Package &amp;gt; com.pokedex.reactiveweb.&lt;strong&gt;model&lt;/strong&gt; &amp;gt; enter&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fqGpeROQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/jkdc918yk00v2h8ij2a0.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fqGpeROQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/jkdc918yk00v2h8ij2a0.PNG" alt="package model sendo gerado no intellij" width="501" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro dele crie uma nova classe com o nome &lt;strong&gt;Pokemon&lt;/strong&gt; , dentro dessa classe será colocado as informações que os pokemons terão, tais como Id, Nome, Poder etc... Dentro dessa classe coloque:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Agora só precisa gerar os &lt;strong&gt;getter e setters&lt;/strong&gt; , &lt;strong&gt;boolean equals&lt;/strong&gt; , &lt;strong&gt;hashcode&lt;/strong&gt; , e o &lt;strong&gt;toString&lt;/strong&gt; , você pode fazer tudo isso apertando &lt;code&gt;ALT + INSERT&lt;/code&gt; &amp;gt; getter/ setter &amp;gt; equals() hashcode() &amp;gt; toString() &amp;gt; Override Methods &amp;gt; Constructor&lt;/p&gt;

&lt;p&gt;Pode ir fazendo um seguido do outro, o IntelliJ ou IDE que você estiver utilizando irá gerar todos esses métodos pra você!&lt;/p&gt;

&lt;h1&gt;
  
  
  Criando um repository
&lt;/h1&gt;

&lt;p&gt;No repository é onde fica a persistência dos dados, para criá-lo clique com o botão direito em &lt;strong&gt;com.pokedex.reactiveweb&lt;/strong&gt; &amp;gt; New &amp;gt; Package &amp;gt; com.pokedex.reactiveweb.&lt;strong&gt;repository&lt;/strong&gt; &amp;gt; enter&lt;/p&gt;

&lt;p&gt;Dentro desse package será criado uma &lt;strong&gt;interface&lt;/strong&gt; com o nome de &lt;strong&gt;PokemonRepository&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Interface é uma tipo de abstração que usamos para especificar o tipo de comportamento que as classes devem implementar&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dentro nessa interface coloque o seguinte código:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;O Spring Data já facilita muito nossa vida, sendo assim, a única coisa que precisamos colocar nessa interface é uma especificação que ela irá funcionar com o objeto Pokemon String.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se você clicar no &lt;strong&gt;ReactiveMongoRepository&lt;/strong&gt; irá ver o que o ele tras por debaixo dos panos, tais como métodos mono e flux, findByID, finalAll etc..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora sim podemos Inicializar nosso banco de dados (͠≖ ʖ͠≖)👌&lt;/p&gt;

&lt;h1&gt;
  
  
  Inicializando o MongoDB
&lt;/h1&gt;

&lt;p&gt;Estamos usando o Mongo Embeded, sendo assim, não é necessário que você crie um conta ou etc, esta tudo local na nossa máquina.&lt;/p&gt;

&lt;p&gt;Na classe Main() criaremos uma chamada do nosso banco de dados, usando o CommandLiner que é uma interface funcional que recebe variável de argumentos em cadeia.. o mesmo deve estar anotado com o &lt;strong&gt;@Bean&lt;/strong&gt; para o spring boot entender que aquilo deve ser processado, enfim, o resultado deve ser o seguinte código:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Aqui vemos algo de diferente, nao estamos trazendo os métodos padrões (findAll, findById etc) por que estamos trabalhando com um banco de dados embutido, mas caso você queira usar um Mongo Atlas por exemplo, o &lt;strong&gt;ReactiveMongoOperations&lt;/strong&gt; gera essa série de métodos pra você.&lt;/p&gt;

&lt;p&gt;Nesse código o .flatMap consulta o findAll e imprime os dados, e o thenMany faz isso também só que de forma assíncrona, e o subscribe imprime na tela também&lt;/p&gt;

&lt;p&gt;Agora se a executarmos veremos que o banco de dados subiu, e os dados inseridos serão mostrados na tela, você terá algo assim:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aLNy2L0k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/eu4bjclvbbhtbl62e6mm.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aLNy2L0k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/eu4bjclvbbhtbl62e6mm.PNG" alt="console mostrando os dados que foram salvos" width="800" height="91"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Criando o Controller
&lt;/h1&gt;

&lt;p&gt;Controller é nossa classe de controller, nela estarão nossos métodos de criação, update, delete e leitura dos nossos pokémons.&lt;/p&gt;

&lt;p&gt;Para criá-lo clique com o botão direito em &lt;strong&gt;com.pokedex.reactiveweb&lt;/strong&gt; &amp;gt; New &amp;gt; Package &amp;gt; com.pokedex.reactiveweb.&lt;strong&gt;controller&lt;/strong&gt; &amp;gt; enter&lt;br&gt;
E repetir esse mesmo processo para criar uma classe &lt;/p&gt;

&lt;p&gt;Agora bora criar os métodos que já estamos chegando no resultado final  (•◡•) /&lt;/p&gt;
&lt;h3&gt;
  
  
  Buscando todos os pokemons
&lt;/h3&gt;

&lt;p&gt;Agora você deve criar uma instância e dentro dela terá o método para trazer todos os pokémons, ficará assim:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Bucando o Pokémon por id
&lt;/h2&gt;

&lt;p&gt;Para buscar por id, colocaque o método dentro da instância, igual o anterior:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Você que nesse método está o &lt;strong&gt;Mono&lt;/strong&gt; tipo pokémon? Isso significa que queremos apenas que 1 id seja chamado, e quando esse id não for encontrado, trazemos uma reposta HTTP.&lt;/p&gt;

&lt;p&gt;O defaultIfEmpty é usado para quando o Id é chamado numa entidade vazia, ele retornará um status &lt;em&gt;NOTFOUND&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lembre-se de que o .map() deve retornar uma função síncrona e o resultado será capturado em um editor Mono, pois findById retorna um Mono&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Criando e salvando um novo Pokémon
&lt;/h2&gt;

&lt;p&gt;Para criar um novo e salvar pokémon basta digitar o código abaixo&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Retornará um Mono por que é o que será retornado no repositório.&lt;/p&gt;

&lt;h2&gt;
  
  
  Atualizando um Pokémon
&lt;/h2&gt;

&lt;p&gt;Agora vamos combinar tudo o que você já viu até aqui para atualizar um Pokémon. Para atualizarmos um pokémon receberemos um id, e uma instância do pokémon com novos valores a serem atualizados.&lt;/p&gt;

&lt;p&gt;Vamos começar procurando por id, e se ele for encontrado será atualizado ao contrário será recebido um status &lt;em&gt;NOTFOUND&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;A segunda parte do código um operador map para essa transformação, e assim se um Mono vazio for retornado com defaultEmpty ele retornará um status NOTOFUND, esse bloco de código poderia também ser feito com if/ else, mas o jeito que fizemos foi do modo &lt;strong&gt;declarativo&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Excluindo um Pokémon
&lt;/h2&gt;

&lt;p&gt;O método para exlcuir é semelhante aos anteriores também, para deletar quando criar um método que deleta um pokémon por id:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;E outro método para deletar TODOS os Pokémons&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Prontinho, agora temos nosso CRUD completo onde criamos de maneira reativa e funcional, agora precisamos criar nosso Event Stream (parte mais legal o/)&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando um Event Stream ᕙ(`▿´)ᕗ
&lt;/h2&gt;

&lt;p&gt;Para criarmos nosso método de eventos no controller, precisamos criar a classe onde estão os atributos do evento, para isso dentro do package &lt;strong&gt;model&lt;/strong&gt; crie uma classe &lt;strong&gt;PokemonEvent&lt;/strong&gt; , com os seguinte código:&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PokemonEvent&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt; &lt;span class="n"&gt;eventId&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;eventType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Da mesma forma que foi feito com o classe Pokémon dentro do package Model logo acima,  só vai precisa gerar os &lt;strong&gt;getter e setters&lt;/strong&gt; , &lt;strong&gt;boolean equals&lt;/strong&gt; , &lt;strong&gt;hashcode&lt;/strong&gt; , e o &lt;strong&gt;toString&lt;/strong&gt; , você pode fazer tudo isso apertando &lt;code&gt;&lt;/code&gt; ALT + INSERT &lt;code&gt;&lt;/code&gt; &amp;gt; getter/ setter &amp;gt; equals() hashcode() &amp;gt; toString() &amp;gt; Override Methods &amp;gt; Constructor&lt;/p&gt;

&lt;p&gt;showww, agora vamos voltar na classe &lt;strong&gt;PokemonController&lt;/strong&gt; , e criar nosso método de eventos, que ficará da seguinte forma:&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt; &lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/events"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;produces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MediaType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TEXT_EVENT_STREAM_VALUE&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Flux&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PokemonEvent&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;getPokemonEvents&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Flux&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Duration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofSeconds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PokemonEvent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Product Event"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;O interval traz o tanto de segundos que o meu evento será mostrado, nesse caso de 5 em 5 segundos um evento novo é gerado!&lt;/p&gt;

&lt;p&gt;Estamos quase acabando, agora só falta testar nossos endpoints ( ͡~ ͜ʖ ͡°)&lt;/p&gt;
&lt;h1&gt;
  
  
  Testando a aplicação
&lt;/h1&gt;

&lt;p&gt;Para testar nossa aplicação vamos ver se tudo irá subir certinho, para isso vá até o método main() e starte ele, e fique de olho no console para ver se não surge nenhum erro, a resposta deve voltar mais ou menos assim:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jdJbIQuU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/pchxhipfx0r8ysnpcwmg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jdJbIQuU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/pchxhipfx0r8ysnpcwmg.PNG" alt="mensagem de êxito no console" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora bora pro postman testar os endpoints&lt;/p&gt;
&lt;h4&gt;
  
  
  Buscando todos os Pokémons
&lt;/h4&gt;

&lt;p&gt;O primeiro método que vamos testar é o GET, que vai trazer todos os pokémons que foram salvos, no postman ira trazer os seguintes resultados:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--85KQ2a84--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/4v0o32uw42i08w3wplgy.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--85KQ2a84--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/4v0o32uw42i08w3wplgy.PNG" alt="resultado da busca GET dos pokemons" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Veja que na busca optamos por GET, pois estamos "pegando" todos os pokémons, para testar os demais como: "PUT", "POST" ... etc, basta mudarmos essa opção, então bora lá&lt;/p&gt;
&lt;h4&gt;
  
  
  Buscando um Pokémon por id
&lt;/h4&gt;

&lt;p&gt;Para buscar por id, basta copiar e colar um id que foi gerado na resposta do GET&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TjLZ-2B8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/ia05dzrg0j10mmwdd8ba.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TjLZ-2B8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/ia05dzrg0j10mmwdd8ba.PNG" alt="buscando um pokémon por id " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Inserindo um novo Pokémon
&lt;/h4&gt;

&lt;p&gt;No próprio postamn mude a requisição para &lt;strong&gt;POST&lt;/strong&gt; e no &lt;strong&gt;Body&lt;/strong&gt; selecione &lt;strong&gt;raw&lt;/strong&gt;  &amp;gt; &lt;strong&gt;JSON&lt;/strong&gt; pois queremos salvar em formato json, e digite:&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;   &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"nome"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"IbySaur"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"categoria"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Semente"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"habilidades"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"OverGrow"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"peso"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;13.0&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Após isso, clique em &lt;strong&gt;SEND&lt;/strong&gt; e seu pokémon será salvo!&lt;br&gt;
Deverá retornar um &lt;em&gt;STATUS 201&lt;/em&gt;* o que mostra que foi criado com êxito, para ter certeza, vamos voltar no &lt;strong&gt;GET&lt;/strong&gt; , copiar e colar o id gerado, que ele mostrará nosso pokémon criado..&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O id não precisa colocar pois ele é gerado automaticamente pelo MongoDB&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  Deletando um Pokémon
&lt;/h4&gt;

&lt;p&gt;Agora vamos deletar os métodos &lt;strong&gt;deleteALL&lt;/strong&gt; e &lt;strong&gt;deleted&lt;/strong&gt;, sendo assim no postman vamos mudar a requisição para &lt;strong&gt;DELETE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aq-_ov0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/6qwnx8ppazwilsjasuj3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aq-_ov0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/6qwnx8ppazwilsjasuj3.PNG" alt="deletando um pokémon no postman" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vejam que eu coloco o id de algum pokémon que eu queira excluir&lt;/p&gt;

&lt;p&gt;Se eu tirar esse id ele vai exlcuir TODOS OS POKÉMONS&lt;/p&gt;
&lt;h1&gt;
  
  
  Testando o Events Stream
&lt;/h1&gt;

&lt;p&gt;Vimos que nosso CRUD está no esquema já, ou seja, está funcionando bem lindão...&lt;br&gt;
Com nossa aplicação iniciada ainda, vamos testar o events stream, para isso vá até um browser se sua preferência e digite: &lt;/p&gt;

&lt;p&gt;&lt;code&gt; http://localhost:8080/pokemons/events &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;E você vai ver a mágica acontecer a cada 5 segundo estará no retornando um evento de pokémons&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bgl6eQpH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/42h661k4qpym00rm0kk2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bgl6eQpH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/42h661k4qpym00rm0kk2.PNG" alt="resposta do browser na consulta de pokemons" width="720" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você abrir essa mesma requisição em outra janela, você vai ver que no events stream vai permitir que outra requisição seja chamada sem esperar que a anterior termine, isso é uma chama não-bloqueando, típica do Spring Webflux.&lt;/p&gt;
&lt;h1&gt;
  
  
  Deploy no Heroku
&lt;/h1&gt;

&lt;p&gt;Shoooow agora você já tem uma aplicação topzera, bora subir ela na nuvem?&lt;/p&gt;

&lt;p&gt;Para subir nossa aplicação, precisamos colocar o plugin do heroku no nosso pom.xml:&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;project&amp;gt;&lt;/span&gt;
  ...
  &lt;span class="nt"&gt;&amp;lt;build&amp;gt;&lt;/span&gt;
    ...
    &lt;span class="nt"&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.heroku.sdk&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;heroku-maven-plugin&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.0.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Agora vá até a pasta da sua aplicação, usando um terminal (eu vou usar o gitbash) ,  e digite &lt;code&gt; heroku login &lt;/code&gt; , para acessar sua conta no heroku&lt;/p&gt;

&lt;p&gt;Irá aparecer uma janela assim pra você:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xFv_EcbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/ij5bdqyb3r1sd02vg3en.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xFv_EcbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/ij5bdqyb3r1sd02vg3en.PNG" alt="login heroku" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clique em Login e já pode fechar essa janela que você estará com o login ativo no Heroku!&lt;/p&gt;

&lt;p&gt;Agora é só esperar o terminal processar&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HESyxn_q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/h7ezz4egnh36jaubrl2l.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HESyxn_q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/h7ezz4egnh36jaubrl2l.PNG" alt="terminal processando o login no heroku" width="800" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois que terminar de carregar, iremos criar um app para hospedar nossa aplicação, faremos isso com o comando &lt;code&gt; heroku create &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;E estamos quase lá, seu app foi criado, no terminal ele vai te gerar um link e essa mensagem:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GfmiJziD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/3w71sxu8r6uh0j5nxfmy.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GfmiJziD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/3w71sxu8r6uh0j5nxfmy.PNG" alt="mensagem de que o app foi criado com sucesso" width="800" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estamos prontos pro Deploy&lt;/p&gt;

&lt;p&gt;Se seu aplicativo é um standalone (e, portanto, requer um tipo de processo), você pode implantar com este comando: &lt;code&gt; mvn clean heroku:deploy &lt;/code&gt;&lt;br&gt;
Só esperar um segundinhos e verificar os logs...&lt;/p&gt;

&lt;p&gt;Se a mensagem &lt;strong&gt;BUILD SUCESS&lt;/strong&gt; aparecer significa que tudo deu certo, pode respirar de alívio!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E06rsibo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/fivu3kw2zycex79vbr40.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E06rsibo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/fivu3kw2zycex79vbr40.PNG" alt="build feito com sucesso" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PARABÉNSSS sua aplicação subiuuu&lt;br&gt;
&lt;a href="https://i.giphy.com/media/b5LTssxCLpvVe/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/b5LTssxCLpvVe/giphy.gif" alt="Will Smith dançando" width="364" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para acessar basta digitar &lt;code&gt; heroku open&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9gRjiGSJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1irez40cysf3jdr1dmrq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9gRjiGSJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1irez40cysf3jdr1dmrq.PNG" alt="dashboard do heroku" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusão
&lt;/h1&gt;

&lt;p&gt;Spring Webflux é um módulo muito bacana no SpringBoot, com ele além de criamos um CRUD podemos criar uma sequência de eventos, mas isso não quer dizer que sempre devemos usar aplicações reativas, tudo depende do seu cenário e da viabilidade&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;E se você chegou até aqui parabéns você é um &lt;strong&gt;vencedor&lt;/strong&gt;, acredito que não existe nada mais recopensador do que ver a nossa aplicação funcionando né? Então compartilhe também, e coloque no github para que mais e mais pessoas possam aprender assim como você! ʕ•́ᴥ•̀ʔっ&lt;/p&gt;

&lt;p&gt;O código desta aplicação está no meu Github -&amp;gt; &lt;br&gt;
&lt;a href="https://bit.ly/pokedex-reativo"&gt;https://bit.ly/pokedex-reativo&lt;/a&gt;&lt;br&gt;
Dê uma estrelinha lá no github se te ajudou &amp;lt;3&lt;/p&gt;

&lt;p&gt;Referências:&lt;br&gt;
&lt;a href="https://devcenter.heroku.com/articles/deploying-java-applications-with-the-heroku-maven-plugin"&gt;Heroku DevCenter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/channel/UC2WbG8UgpPaLcFSNJYwtPow"&gt;Canal do Youtube da Michelli Brito&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos vemos na próxima, dêem likesss e compartilhem, e vejam os outros artigos da womakerscode quem quiser me seguir nas redes socias @anabneri #tamojunto&lt;/p&gt;

</description>
      <category>java</category>
      <category>heroku</category>
      <category>spring</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>Sem medo dos Ponteiros #1 - Introdução</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Sat, 11 Apr 2020 22:18:57 +0000</pubDate>
      <link>https://forem.com/ananeridev/1-sem-medo-dos-ponteiros-1fa1</link>
      <guid>https://forem.com/ananeridev/1-sem-medo-dos-ponteiros-1fa1</guid>
      <description>&lt;p&gt;Na linguagens C e C++ é muito comum ouvirmos sobre ponteiros, referências e entregas de valor em um programa ou subprograma, mas o que de fato é um ponteiro e como consigo usar?&lt;/p&gt;

&lt;p&gt;O objetivo desse artigo é trazer uma introdução sobre ponteiro na linguagem C (sim C, não se assuste), ao contrário do que muitos pensam C não é um bicho de sete cabeças e é uma linguagem bem bacana para se entender conceitos difíceis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vale lembrar que o objetivo desse artigo não é ensinar sobre C ou C++, é para ensinar ou aguçar suas pesquisas sobre ponteiros :)&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Para este artigo existem algumas coisas que você já deve saber:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Programação básica&lt;/li&gt;
&lt;li&gt;Conceitos de gerenciamento de memória&lt;/li&gt;
&lt;li&gt;Variáveis&lt;/li&gt;
&lt;li&gt;Passagem de parâmetros&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pré Requisitos
&lt;/h2&gt;

&lt;p&gt;Vamos "colocar na mesa" alguns assuntos para que o que for falado sobre ponteiros não fique tão complicado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memória&lt;/strong&gt; : Podemos definir como um conjunto de elementos que tem por sua função armazenar uma informação, esse armazenamento pode ser em vários níveis. Podemos usar como exemplo as palvavras, que são elementos marcados com um único valor, e ele valor é guardado em bytes à partir de um endereço de memória:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endereço&lt;/th&gt;
&lt;th&gt;Palavras&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1000 [0]&lt;/td&gt;
&lt;td&gt;primeiro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1001 [1]&lt;/td&gt;
&lt;td&gt;segundo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002  [2]&lt;/td&gt;
&lt;td&gt;terceiro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1003  [3]&lt;/td&gt;
&lt;td&gt;quarto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1004  [4]&lt;/td&gt;
&lt;td&gt;quinto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1005  [5]&lt;/td&gt;
&lt;td&gt;sexto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Beleza, sabendo disso podemos dizer então que a memória é composta por palavras, Strings, e que cada uma delas possui seu espaço, e esses espaços são organizados da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organização da memória&lt;/strong&gt;: No último artigo eu trouxe uma introdução ao gerenciamento de memória, mais especifiamente na JVM (Java Virtual Machine), se você quiser lê-lo só &lt;a href="https://dev.to/anabneri/jvm-por-debaixo-dos-panos-2-vmproperties-e-introducao-a-memoria-2llm"&gt;clicar AQUI&lt;/a&gt;.&lt;br&gt;
No C não muda muito do Java, até por que Java é linguagem que foi baseada no C++, então veja como é realizada a organização da memória.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heap: é como uma área de alocação dinâmica, onde seu espaço é reservado para guardar as váriaveis e dados que são criados durante a execução do programa;&lt;/li&gt;
&lt;li&gt;Stack ou Pilha: é uma região também dinâmica da memória que é utilizada para armazenar o endereço de funções que foram chamadas e interrupções de chamadas de parâmetro;&lt;/li&gt;
&lt;li&gt;Dados: onde variáveis globais e estáticas são armazenadas;&lt;/li&gt;
&lt;li&gt;Programa: onde armazena as isntruções.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ponteiros,  que são, onde vivem, o que comem
&lt;/h2&gt;

&lt;p&gt;Ponteiros são váriáveis que guardam endereços dentro da memória. &lt;/p&gt;

&lt;p&gt;Vejam no exemplo abaixo, temos a variável "A", e essa variável é um ponteiro e o "A" vai armazenar um endereço de "F".&lt;br&gt;
Voltando na nossa tabela de endereços, vê-se então que "A", tem o valor de 1005&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endereço&lt;/th&gt;
&lt;th&gt;Palavras&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1000 [1005]&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1003&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1004&lt;/td&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1005&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sendo assim podemos dizer que a variável "A" aponta pra variável "F" ou &lt;strong&gt;A ---&amp;gt; F&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Como declarar ponteiros
&lt;/h2&gt;

&lt;p&gt;Ponteiros são declarados como&lt;br&gt;
&lt;br&gt;
 `&lt;code&gt;tipo  *nome;&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
` , o asterisco identifica essa variável como ponteiro, por isso é muito importante o use, para identificar que será recebido um endereço.&lt;/p&gt;

&lt;p&gt;Mesmo sendo endereços de memória precisamos usar os tipos, pois cada tipo tem tamanho diferente, e quando estamos seperando espacinhos da memória para serem endereçados, os mesmos dependem do tipo que for escolhido. Cada tipo &lt;code&gt;&lt;/code&gt;&lt;code&gt;float, Int, String..&lt;/code&gt;&lt;code&gt;&lt;/code&gt;, tem tamanhos diferentes, assim como a memória. &lt;/p&gt;

&lt;h2&gt;
  
  
  Operadores
&lt;/h2&gt;

&lt;p&gt;&amp;amp; &amp;lt;- usamos para trazer o endereço da variável&lt;br&gt;
Por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;int A; &amp;amp;A&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
 estamos pegando o endereço que a variável "A" traz.&lt;/p&gt;

&lt;p&gt;(*) &amp;lt;- pega o valor que os ponteiros trazem&lt;br&gt;
Por exemplo:&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;A&lt;/code&gt;&lt;code&gt;&lt;/code&gt; , temos apenas o endereço&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;*A&lt;/code&gt;&lt;code&gt;&lt;/code&gt; estamos pegando o valor que a variável "A" traz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemplificando
&lt;/h2&gt;

&lt;p&gt;Vamos supor que temos essas três variáveis: &lt;code&gt;&lt;/code&gt;&lt;code&gt;int count; int q; int *m;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Nesse caso m recebe o endereço de count &lt;code&gt;&lt;/code&gt;&lt;code&gt;m = &amp;amp; count;&lt;/code&gt;&lt;code&gt;&lt;/code&gt; , alocado na memória ficaria assim:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endereço&lt;/th&gt;
&lt;th&gt;Referência&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1003 [1000]&lt;/td&gt;
&lt;td&gt;*m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O que podemos dizer do quadro acima?&lt;/p&gt;

&lt;p&gt;Que a variável &lt;code&gt;&lt;/code&gt;&lt;code&gt;*m&lt;/code&gt;&lt;code&gt;&lt;/code&gt; está apontando para count, por isso ela esta armazenando o valor 1000 na sua posição, quando formos chamar por &lt;code&gt;&lt;/code&gt;&lt;code&gt;*m&lt;/code&gt;&lt;code&gt;&lt;/code&gt; estaremos chamando pelo valor de 1000 não de 1003&lt;/p&gt;

&lt;p&gt;Agora vamos colocar o valor de count igual a  6000 &lt;code&gt;&lt;/code&gt;&lt;code&gt;count=6000;&lt;/code&gt;&lt;code&gt;&lt;/code&gt; , e dizer que a variável q é apontado por *m &lt;code&gt;&lt;/code&gt;&lt;code&gt;q=*m&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endereço&lt;/th&gt;
&lt;th&gt;Referência&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1000 [6000]&lt;/td&gt;
&lt;td&gt;count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002 [6000]&lt;/td&gt;
&lt;td&gt;q&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1003 [1000]&lt;/td&gt;
&lt;td&gt;*m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Se &lt;code&gt;&lt;/code&gt;&lt;code&gt;*m&lt;/code&gt;&lt;code&gt;&lt;/code&gt; está apontando para &lt;code&gt;&lt;/code&gt;&lt;code&gt;count&lt;/code&gt;&lt;code&gt;&lt;/code&gt; e o mesmo tem o valor de 6000 então como &lt;code&gt;&lt;/code&gt;&lt;code&gt;q&lt;/code&gt;&lt;code&gt;&lt;/code&gt; esta atribuindo o valor de &lt;code&gt;&lt;/code&gt;&lt;code&gt;*m&lt;/code&gt;&lt;code&gt;&lt;/code&gt; então o valor à qual &lt;code&gt;&lt;/code&gt;&lt;code&gt;q&lt;/code&gt;&lt;code&gt;&lt;/code&gt; aponta é 6000.&lt;/p&gt;

&lt;h2&gt;
  
  
  TOMA CUIDADO COM OS PONTEIROS
&lt;/h2&gt;

&lt;p&gt;Usar ponteiros em sistemas de larga escala pode ser muito perigoso, pois como duas ou mais variáveis não têm um valor, mas sim um endereço de memória, então quando o tamanho da memória é mudado, impactada as demais variáveis que estavam fazendo referência ao mesmo.&lt;/p&gt;

&lt;p&gt;Next Steps: No próximo artigo vamos usar código, realizando um programa em C, vamos ver como funcionam os ponteiros através de um desafio :D, animou?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Deixa seu feedback e possíveis dúvidas nos comentários&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Referências:&lt;br&gt;
&lt;a href="https://www.embarcados.com.br/ponteiro-em-c-definicao/"&gt;https://www.embarcados.com.br/ponteiro-em-c-definicao/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/pointers-in-c-and-c-set-1-introduction-arithmetic-and-array/"&gt;https://www.geeksforgeeks.org/pointers-in-c-and-c-set-1-introduction-arithmetic-and-array/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/MT9MOLJXrXfVvMJ34C/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/MT9MOLJXrXfVvMJ34C/giphy.gif" alt="thank you next, gif do videoclip da ariana grande"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codequality</category>
      <category>c</category>
      <category>pointers</category>
    </item>
    <item>
      <title>JVM por debaixo dos panos #2 - VMproperties e introdução à Memória</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Tue, 17 Mar 2020 01:56:21 +0000</pubDate>
      <link>https://forem.com/ananeridev/jvm-por-debaixo-dos-panos-2-vmproperties-e-introducao-a-memoria-2llm</link>
      <guid>https://forem.com/ananeridev/jvm-por-debaixo-dos-panos-2-vmproperties-e-introducao-a-memoria-2llm</guid>
      <description>&lt;p&gt;&lt;strong&gt;☕ Esta é minha série de artigos sobre Java Virtual Machine!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O core da JVM é aquilo que é indispensável de você entender, desde uma configuração simples, até gerenciamento de memória dentro da JVM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo a Virtual Machine na sua IDE
&lt;/h2&gt;

&lt;p&gt;Configurar a VM na sua IDE de desenvolvimento é essencial para que seu código rode de forma que não impacte nada, veremos mais pra frente como tudo por volta da JVM faz com que tudo esteja lidando de forma mais responsiva possível. Então vamos começar de algum lugar, e depois mergulhar mais fundo em memória.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dica: É interessante e de suma importância a JVM ser configurada de acordo com a sua IDE, você pode obter essa configuração de diversas maneiras, mas nesse tutorial eu vou ensinar a configuração sendo feita no IntelliJ no Windows 10&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Configurando o IntelliJ
&lt;/h4&gt;

&lt;p&gt;Nele a maneira mais fácil de alterar as opções da JVM é em:&lt;/p&gt;

&lt;p&gt;Ajuda &amp;gt; Edit VM custom options&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1We8wLKA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/btkkd5sw4unam86h7dbb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1We8wLKA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/btkkd5sw4unam86h7dbb.png" alt="tela do IntelliJ com a aba de ajuda selecionada" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta ação vai resultar numa cópia do arquivo .vmproperties, após feito isso no diretório de configuração da sua IDE, você vai ter um documento no editor que pode ser alterado conforme a imagem a seguir:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---52O5Kyj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/pxlnr4rajvwl3uwuvw67.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---52O5Kyj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/pxlnr4rajvwl3uwuvw67.png" alt="arquivo gerado após clicar" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você não conseguir fazer pela sua IDE, está tudo bem, abrindo o seu terminal (cmd ou o terminal do linux) , você consegue a edição desse arquivo manualmente com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SUA_IDE\bin\&amp;lt;product&amp;gt;[bits][.exe].vmoptions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo abaixo será executado este arquivo no terminal do Windows 10, localizei a pasta onde estava minha IDE (IntelliJ) , e a partir daí eu executei meu &lt;strong&gt;.vmproperties&lt;/strong&gt; e então executei o VM options, o caminho pode variar de acordo da pasta que esta salva sua IDE e onde seu código esta sendo editado.&lt;/p&gt;

&lt;p&gt;Depois de executado o é redirecionado ao editor de preferência&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idea64.exe.vmoptions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DXpg5Uc_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/lo3zjp16flvykalf4hls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DXpg5Uc_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/lo3zjp16flvykalf4hls.png" alt="cmd com o idea.exe.vmoptions sendo executado" width="753" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na imagem temos as opções do editor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pn2fQgic--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/0a7d9tjc48c5qppa1qrj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pn2fQgic--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/0a7d9tjc48c5qppa1qrj.png" alt="arquivo gerado a partir dele" width="634" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As opções são definidas linha por linha, e  você pode configurar da forma que for mais adequada pro seu sistema, a configuração padrão que você pode adquirir é conforme esta abaixo, a mesma disponível no site da &lt;a href="https://intellij-support.jetbrains.com/hc/en-us/articles/206544869-Configuring-JVM-options-and-platform-properties"&gt;JebBrains &lt;/a&gt;com pequenas mudanças que se adequem ao meu sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-server
-Xms128m
-Xmx512m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:MaxJavaStackTraceDepth=-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  As opções mais comuns
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opção&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-Xmx&lt;/td&gt;
&lt;td&gt;Limita o tamanho da heap que a JVM pode alocar e executar no IntelliJ. O valor padrão depende da plataforma, se você estiver enfrentando lentidão você pode querer aumentar esse valor, por exemplo, definir ele pra 2048 megabytes, que ficará &lt;strong&gt;-Xmx2048m&lt;/strong&gt; .&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-Xms&lt;/td&gt;
&lt;td&gt;Especifica a memória inicial alocada pela JVM para executar o IntelliJ. O valor padrão depende da plataforma que você estiver usando, geralmente é definido para cerca de metade da memória máxima permitida (-Xmx), por exemplo, &lt;strong&gt;-Xms1024m&lt;/strong&gt; .&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-XX : NewRatio&lt;/td&gt;
&lt;td&gt;Especifica a razão entre o tamanho da Young Generation e Old Generation. Na maioria dos casos, recomenda-se uma ratio entre 2 e 4. Isso definirá o tamanho da young generation para ser 1/2 a 1/4 da old generation correspondente, o que é até bom quando você muitas vezes está trabalhando num projeto e em apenas um arquivo de cada vez. No entanto, se você esta constantemente abrindo arquivos novos, e alternando entre vários projetos, você pode precisar aumentar a young generation. Neste caso, tente a configuração &lt;strong&gt;--XX:NewRaio=1&lt;/strong&gt;, que tornará a young generation tão grande quanto a Old generation, permitindo que seus objetos criados permaneçam na young generation por mais tempo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Você deve estar se perguntando o que são esses tais Old Generation, Young Generation e afins, né?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h1oIJ2Sg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/g2y4wq7xgg62xostxs9t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h1oIJ2Sg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/g2y4wq7xgg62xostxs9t.jpg" alt="Mulher idosa com feição de dúvida" width="500" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Agora chegamos em um outro nível, onde vamos abordar o gerenciamento de memória, neste artigo vamos ter apenas uma significado do que cada uma é:
&lt;/h4&gt;

&lt;p&gt;Nós próximos artigos veremos mais a fundo .&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução à memória da JVM
&lt;/h2&gt;

&lt;p&gt;Basicamente a JVM é dividida em duas partes: Memória Heap e Non-heap (que também você pode encontrar po Não-heap), Os espaços vistos como Heap e Não-Heap, e em alguns livros ou fontes externas você pode encontrar como Stack também que são endereçamentos de memória. veja na arquitetura abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7RoF1nEE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/onka7z4hhgok65m59bv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7RoF1nEE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/onka7z4hhgok65m59bv5.png" alt="Alt Text" width="541" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;o significado de cada uma é:&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Heap&lt;/strong&gt;: é como uma área de alocação dinâmica, onde seu espaço é reservado para guardar as váriaveis e dados que são criados durante a execução do programa.&lt;/p&gt;

&lt;p&gt;Basicamento o Heap é todo estruturado e divido em gerações para organizar melhor os objetos que são entregues.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Young Generation&lt;/strong&gt; é o tempo de vida mínimo de um objeto, antes do garbage collector passar por essa geração todos ficam alocados aí, e dentro do young generation temos, os seguintes espaços:&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Eden&lt;/strong&gt;:  como o próprio nome já diz: Eden, ou seja, início, neste espaço ficam alocados os objetos novos, recém criados.  A cada objeto criado, por exemplo, Pessoa ana = new Pessoa ( ); ficaria alocado neste espaço da memória. &lt;/p&gt;

&lt;p&gt;Esta área tende a reter os objetos por pouco tempo, pois dentro de cada execução de um programa muitos destes objetos são criados, então os objetos passam um ciclo de vida curto no Eden.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Survivor Spaces&lt;/strong&gt;: depois do Eden estar totalmente ocupado e sem a possibilidade de ter nenhum novo objeto dentro dele, os mesmo passam ao Survivor Spaces, onde a JVM executa uma Garbage Collection (veremos mais a frente sobre o mesmo) que remove os objetos que estão sem referência e uso, a fim de liberar mais memória. Quando os objetos são criados de forma correta e com referência, eles passam do Eden e sobrevivem ao Garbage Collector, sendo movidos para a área de sobrevivência, mas com a esperança de passarem para a próxima.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Old Generation&lt;/strong&gt;: basicamente quando não há mais espaço na memóra os objetos ficam alocados na Old Generation.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Permanent Generation&lt;/strong&gt;: depois de todo esse ciclo de vida, você chega a geração permanente, é a área definida pela JVM para armazenar as definições de classes&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vale lembrar que todo esse gerenciamento de memória esta baseado no Java 8&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;E ficamos por aqui, acompanhe essa série sobre Java Virtual Machine, no próximo artigo teremos GARBAGE COLLECTIONS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/MT9MOLJXrXfVvMJ34C/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/MT9MOLJXrXfVvMJ34C/giphy.gif" alt="thank you next, gif do videoclip da ariana grande" width="480" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Referências:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nGMGbYFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.jetbrains.com/help/idea/tuning-the-ide.html" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nGMGbYFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.jetbrains.com/help/idea/tuning-the-ide.html" alt="Site da JetBrains" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>tutorial</category>
      <category>advanced</category>
    </item>
    <item>
      <title>JVM por debaixo dos panos #1 - O que é o Java?</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Tue, 24 Sep 2019 20:28:49 +0000</pubDate>
      <link>https://forem.com/ananeridev/jvm-por-debaixo-dos-panos-1-o-que-e-o-java-1h3m</link>
      <guid>https://forem.com/ananeridev/jvm-por-debaixo-dos-panos-1-o-que-e-o-java-1h3m</guid>
      <description>&lt;p&gt;&lt;strong&gt;☕ Bem Vindxs à série de artigos sobre Java Virtual Machine!&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  JVM por debaixo dos panos - O que é o java?
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Neste artigo vamos abordar contextualização, acredito que saber da história e de outros vieses é importante antes de partir direto a parte técnica&lt;br&gt;
O conteúdo é bem extenso e técnico, a meta é deixar o mais objetivo e acessível possivel ☺️&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🤖 Os processos de compilamento
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tudo começa com a história dos computadores de linguagem de alto nível onde o mesmo só entendia &lt;em&gt;micro instruções&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;sabe o código que você escreve? O seu computador não entende ele, nunca entendeu... sim eles são bem burrinhos!&lt;/li&gt;
&lt;li&gt;Na verdade o seu computador entende o &lt;strong&gt;código executável&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vamos pegar como exemplo uma linguagem "antiga", como &lt;strong&gt;Assembly&lt;/strong&gt;, veja a arquitetura:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basicamente tem um "Hello World", que passa por um tipo de compilador que converte o código em binário &lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fi.imgur.com%2FAx8hq9a.png" 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%2Fi.imgur.com%2FAx8hq9a.png" alt="compilador antigo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mas isso é complexo demais, pensa bem... um sistema operacional vai ler apenas o que foi compilado nele, se for rodar esse mesmo código num MACOX por exemplo teria que fazer tudo de novo!!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Precisava- se de otimização de processos e tempo &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  👽 Processo de compilamento em C
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bastante gente tem o preconceito com C né, mas você sabia que Java foi baseado em C?&lt;/li&gt;
&lt;li&gt;Por que a linguagem C foi revolucionária pra época onde se tornou uma multiplataforma ou seja &lt;strong&gt;tem um compilador para cada Sistema Operacional(SO)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;O processo de compilamento em C é bem simples, veja na arquitetura:&lt;/li&gt;
&lt;/ul&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%2Fi.imgur.com%2FmfA4Bhp.png" 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%2Fi.imgur.com%2FmfA4Bhp.png" alt="compilador em C"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Vemos que o &lt;strong&gt;código fonte&lt;/strong&gt; que eu programo em C ele é levado para dois processos que separadamente irão transformar um &lt;strong&gt;código executável&lt;/strong&gt; para cada sistema operacional :D&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Foi à partir dessa ideia de multiplataforma que nasceu o conceito da JVM do java...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Antes de partimos pra história, o que aprendemos até aqui:&lt;br&gt;
&lt;strong&gt;Código fonte:&lt;/strong&gt; é a sequência de comandos que eu, pessoa programadora escrevo.&lt;br&gt;
&lt;strong&gt;Código executável:&lt;/strong&gt; é a sequência de comandos que o computador entende.&lt;br&gt;
&lt;strong&gt;Linguagem C é multiplataforma.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Java foi baseado em C&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📜 Um breve história sobre o Java
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1990: Sun Microsystems criou um projeto liderado pelo James Gosling baseado em C++ com o intuito de criar uma tecnologia onde diferentes dispositivos diferentes pudessem se comunicar entre si.
Até então não existiam microprocessadores então imagina o quão revolucionário seria este projeto!&lt;/li&gt;
&lt;li&gt;e assim formou-se o Green Team que criaram sua própria linguagem o &lt;strong&gt;Green Talk&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;A linguagem foi rebatizada para &lt;strong&gt;OAK (Carvalho)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;E assim criou-se o &lt;a href="https://blog.caelum.com.br/tv-digital-java-e-brasil/" rel="noopener noreferrer"&gt;Star Seven&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;1992: O projeto Star Seven acabou ficando engavetado pois não houveram investimento das empresas, &lt;em&gt;eu acredito que por ser muito revolucionário&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;O principal core do star seven era interatividade, sendo assim, advinha quem se interessou pela linguagem que foi programado o star seven?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tim Berners-Lee&lt;/strong&gt;, o próprio, na época ele estava desenvolvendo o HTML, que tinha como principal função a interatividade com o usuário em tempo real (o que não existia ainda)&lt;/li&gt;
&lt;li&gt;Foi assim que se juntou a gema e a clara (piada ruim  🤦‍♀️)&lt;/li&gt;
&lt;li&gt;Assim surgiu o &lt;strong&gt;WebRunner&lt;/strong&gt; que permitia INTERATIVIDADE&lt;/li&gt;
&lt;li&gt;Sendo assim agora era só mudar o nome da linguagem pois Oak já existia no mercado, foi quando Gosling reuniu seu grupo e rebatizaram para JAVA, pois é um termo que os americanos têm quando querem café bem forte, &lt;strong&gt;Java Coffee&lt;/strong&gt;, já que nós programadores só funcionamos a base do café, nada mais justo
&lt;em&gt;Essa história do surgimento do nome tem outras versões, nunca saberemos ao certo eu acho, quem sabe um dia eu tenha a oportunidade de falar com alguém que era da Sun Microsystems&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Beleza, entedemos a história linda do Java, legal né?&lt;/li&gt;
&lt;li&gt;Agora só falta entender o por que da JVM...&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ☕ Compilamento do código com a JVM
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Observe a arquitetura abaixo:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FiLDx4zS.png" 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%2Fi.imgur.com%2FiLDx4zS.png" alt="compilador java"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O código depois de feito passa pelo &lt;strong&gt;Java Compiler ou JavaC&lt;/strong&gt; -&amp;gt; Depois disso dentro do &lt;strong&gt;JavaC&lt;/strong&gt; o seu código fonte é convertido para Bytecode -&amp;gt; A JVM lê esse Bytecode e converte para um código executável.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A sacada da JVM é o &lt;strong&gt;BYTECODE&lt;/strong&gt;, a linguagem da JVM, possibilitando assim um multiversionamento para qualquer sistema operacional&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;E o mais legal de tudo isso é que quando você baixa seu Java na sua máquina a JVM já vem junto, não precisa sair procurando (vem a JVM e mais um monte de outras funcionalidades, vale lembrar).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Esse conceito de &lt;em&gt;Write One Run Anywhere&lt;/em&gt; possibilita que várias outras linguagem rodem na JVM, principalmente às linguagens da modinha&lt;/p&gt;
&lt;/blockquote&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%2Fi.imgur.com%2FUMoSciF.png" 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%2Fi.imgur.com%2FUMoSciF.png" alt="linguagens que rodam na jvm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  E aqui terminamos a primeira parte introdutóra sobre JVM! Espero que tenha sido de grande valia, prometo postar a parte 2 em breve
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Se você quiser ler esse mesmo artigo, em inglês, vai estar no meu site:&lt;a href="http://bit.ly/jvm-under-the-hood-1" rel="noopener noreferrer"&gt;http://bit.ly/jvm-under-the-hood-1&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>java</category>
      <category>jvm</category>
      <category>advanced</category>
    </item>
    <item>
      <title>Uma rápida introdução sobre React.js em 5min.</title>
      <dc:creator>Ana Beatriz</dc:creator>
      <pubDate>Wed, 21 Aug 2019 18:05:11 +0000</pubDate>
      <link>https://forem.com/ananeridev/uma-rapida-introducao-sobre-react-js-em-5min-2191</link>
      <guid>https://forem.com/ananeridev/uma-rapida-introducao-sobre-react-js-em-5min-2191</guid>
      <description>&lt;h4&gt;
  
  
  Esse tutorial é inteiramente traduzido e adaptado por mim, então o conteúdo não é inteiramente meu!!! Mas como eu achei muito interessante, resolvi deixar no meu site (&lt;a href="https://anabneri.com.br/" rel="noopener noreferrer"&gt;https://anabneri.com.br/&lt;/a&gt;), porque me ajudou e creio que pode ajudar mais pessoas! ENJOY DUDES
&lt;/h4&gt;

&lt;h2&gt;
  
  
  A configuração
&lt;/h2&gt;

&lt;p&gt;Ao começar a utilizar o REACT, você deve usar a configuração mais simples possível: um arquivo HTML que importa as bibliotecas &lt;code&gt;React&lt;/code&gt; e &lt;code&gt;ReactDOM&lt;/code&gt; usando Tags de script, como esta:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgvukucle2xbu9onuyeae.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgvukucle2xbu9onuyeae.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Também importamos Babel, já que o React usa algo chamado JSX para escrever marcações. Vamos precisar transformar esse JSX em JavaScript simples, para que o navegador possa entendê-lo.&lt;/p&gt;

&lt;p&gt;Há mais duas coisas que vocês precisam observar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;  com o ID de &lt;code&gt;#root&lt;/code&gt;. Este é o ponto de entrada para o nosso aplicativo. Este é o lugar onde todo o nosso aplicativo vai viver.&lt;/li&gt;
&lt;li&gt;o  &lt;code&gt;&amp;lt; script type =  "texto/babel " &amp;gt;&lt;/code&gt; tag no corpo. É aqui que escreveremos o nosso código React. js.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Se você quiser experimentar com o código, confira este playground Scrimba.&lt;/p&gt;

&lt;h2&gt;
  
  
  Componentes/ Components
&lt;/h2&gt;

&lt;p&gt;Tudo em REACT é um componente, e estes geralmente tomam a forma de classes JavaScript. Você cria um componente estendendo-se sobre a classe  &lt;code&gt;react-component&lt;/code&gt;. Vamos criar um componente chamado &lt;code&gt;Eai rapaziada&lt;/code&gt;.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fa52jut61zu7d357sutpz.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fa52jut61zu7d357sutpz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então é aqui que conectamos nosso componente  &lt;code&gt;Hello&lt;/code&gt; com o ponto de entrada para o aplicativo (&lt;code&gt;&amp;lt;div id="root"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;). Isso resulta:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F57cqb4hzm1y76qnkjquu.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F57cqb4hzm1y76qnkjquu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A sintaxe de HTML'ish que apenas olhou para (&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;Hello/&amp;gt;&lt;/code&gt;) é o código JSX que mencionei anteriormente. Não é realmente HTML, embora o que você escreve lá acaba como Tags HTML no DOM.&lt;/p&gt;

&lt;p&gt;O próximo passo é obter o nosso aplicativo para manipular dados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manipulação de dados
&lt;/h2&gt;

&lt;p&gt;Existem dois tipos de dados no React: props e State. A diferença entre os dois é um pouco complicado de entender no início, por isso não se preocupe se você encontrá-lo um pouco confuso. Vai se tornar mais fácil quando você começar a trabalhar com eles.&lt;/p&gt;

&lt;p&gt;A principal diferença é que o estado é privado e pode ser alterado de dentro do próprio componente. Os adereços são externos e não são controlados pelo próprio componente. Ele é passado de componentes acima da hierarquia, que também controlam os dados.&lt;br&gt;
&lt;strong&gt;"um componente pode alterar seu estado interno diretamente. Ele não pode mudar seus adereços diretamente."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vamos dar uma olhada mais de perto em props/adereços primeiro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Props/ Adereços
&lt;/h2&gt;

&lt;p&gt;Nosso componente &lt;code&gt;Hello&lt;/code&gt; é muito estático e renderiza a mesma mensagem independentemente. Uma grande parte do REACT é a reutilização, o que significa a capacidade de escrever um componente uma vez e, em seguida, reutilizá-la em casos de uso diferentes — por exemplo, para exibir mensagens diferentes.&lt;/p&gt;

&lt;p&gt;Para alcançar esse tipo de reutilização, adicionaremos adereços. É assim que você passa adereços para um componente:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Famkugslexlm7q2roszzl.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Famkugslexlm7q2roszzl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este prop é chamado de  &lt;code&gt;message&lt;/code&gt; e tem o valor "my friend". Podemos acessar este prop dentro do componente Hello referenciando  &lt;code&gt;this. props. Message&lt;/code&gt;, assim:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fheqcqkvtax9co4u4h0tc.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fheqcqkvtax9co4u4h0tc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como resultado, isso é renderizado na tela:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fm0jpc8qij1tmici4480m.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fm0jpc8qij1tmici4480m.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A razão pela qual estamos escrevendo {this. props. Message} com chavetas é porque precisamos informar ao JSX que queremos adicionar uma expressão JavaScript. Isto é chamado * * escapando * *.&lt;/p&gt;

&lt;p&gt;Então agora temos um componente reutilizável que pode renderizar qualquer mensagem que quisermos na página. Woohoo!&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Continue lendo no meu site &lt;a href="https://anabneri.com.br/blog/react-em-5min/" rel="noopener noreferrer"&gt;Reactjs em 5 minutos completo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>translate</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
