<?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: Evellyn Lima</title>
    <description>The latest articles on DEV Community by Evellyn Lima (@evelew).</description>
    <link>https://dev.to/evelew</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%2F5295%2F018a7327-d526-455b-9dfe-6ff32c6355e1.jpg</url>
      <title>DEV Community: Evellyn Lima</title>
      <link>https://dev.to/evelew</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/evelew"/>
    <language>en</language>
    <item>
      <title>Retrospectiva 2021</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Tue, 28 Dec 2021 23:48:24 +0000</pubDate>
      <link>https://dev.to/evelew/retrospectiva-2021-3gd4</link>
      <guid>https://dev.to/evelew/retrospectiva-2021-3gd4</guid>
      <description>&lt;p&gt;Resolvi postar essa retrospectiva pra lembrar tudo o que rolou nesse ano e compartilhar aqui como foi meu ano relacionado a carreira/tecnologia.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No começo desse ano defini pra qual lado pretendo seguir (tech x pessoas), eu escolhi seguir mais pro lado de pessoas pq era (e ainda é) o assunto que mais prendeu minha atenção e mais me animou nos últimos tempos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Foi a primeira vez que conversei sobre qual caminho quero seguir com alguém da empresa que tô trabalhando e foi bom demais fazer isso, eu conversei com 2 diretores de tecnologia da RV e eles super me incentivaram e deram várias ideias de como evoluir alguns em pontos que vão me ajudar muito a seguir por esse caminho.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Esse ano eu terminei o MBA em engenharia de software que comecei no ano passado, confesso que quase desisti mas minha namorada me deu maior força pra terminar e deu boa. Durante o MBA eu aprendi sobre várias coisas diferentes e foi graças a ele que eu vi que o caminho que mais me chama atenção é o relacionado a pessoas/negócios. Nele eu tb fiz um projeto que curti muito, eu até fiz um &lt;a href="https://evellynlima.com.br/app-em-ionic-com-api-em-microservicos-rodando-no-docker/"&gt;post sobre ele aqui no blog.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Descobri e comecei a acompanhar a comunidade indiehackers.com, pensei em várias ideias de projetos pra construir mas não finalizei nenhum. O projeto que tô mais focada é um app pra fazer acompanhamento de metas diárias, resolvi fazer um app mobile pq tava afim de mexer com coisas diferentes das que mexo no dia a dia, e como se não bastasse nunca ter mexido com desenvolvimento mobile, eu resolvi fazer esse app em flutter, que é outra coisa que nunca tinha visto. &lt;a href="https://github.com/evelew/rabbit_tracker_app"&gt;Repositório do projeto&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fiquei entre os 300 melhores no ranking do Code You Way, eu fiz um post mostrando a solução que construi pra umas das questões do desafio: &lt;a href="https://evellynlima.com.br/resolvendo-a-questao-06-do-code-your-way-2021/"&gt;acessar o post.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No segundo semestre eu comecei a mentorar uma pessoa pela primeira vez, no começo fiquei meio insegura sobre o que fazer e como ajudar ela mas acredito que ta dando super certo. Hoje inclusive tô mentorando mais um dev então esse desafio dobrou de tamanho e eu tenho curtido muito!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Além de mentorar pessoas dentro do trabalho eu decidi mentorar/ajudar mais pessoas fora do trabalho também, no momento eu tenho acompanhado 2 pessoas e eu tenho aprendido e me surpreendido muito em como a galera aprende rápido.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;E há +- uma semana eu recebi meu feedback da avaliação de fim de ano e fui promovida a frontend sênior. 🥳&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nesse ano rolou muita coisa, vi muita coisa diferente do que tava acostumada, entendi mais sobre o que eu gosto de estudar e tô começando a entender melhor o que me motiva, e o melhor: acredito que ano que vem vai rolar muito mais coisas do que esse ano!&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://evellynlima.com.br/retrospectiva-2021"&gt;Ver post original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/@bhushan07"&gt;Foto tirada por Bhushan Sadani&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>2021</category>
      <category>dev</category>
      <category>carreira</category>
    </item>
    <item>
      <title>Resolvendo a questão 06 do Code Your Way 2021</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Mon, 11 Oct 2021 18:17:17 +0000</pubDate>
      <link>https://dev.to/evelew/resolvendo-a-questao-06-do-code-your-way-2021-5g03</link>
      <guid>https://dev.to/evelew/resolvendo-a-questao-06-do-code-your-way-2021-5g03</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Fiquei entre os 300 melhores 🎉🎉🎉&lt;/p&gt;




&lt;p&gt;Faz uns 4 anos que participo do Code Your Way do Ebanx, a ideia do evento é resolver alguns desafios técnicos pelo HackerRank dentro de um tempo pré-determinado - nesse ano eram 6 desafios para serem resolvidos em 1h30. As pessoas que ficarem entre os 500 primeiros no ranking final ganham uma camiseta exclusiva do evento.&lt;/p&gt;

&lt;p&gt;Eu gosto de fazer esses desafios porque normalmente os problemas são bem diferentes dos que vejo no dia a dia, então é uma boa oportunidade pra fazer coisas diferentes e descobrir novas técnicas, esse é um jeito divertido de evoluir tecnicamente.&lt;/p&gt;

&lt;p&gt;Resolvi postar essa solução aqui porque não consegui terminar ela dentro do tempo proposto mas sabia que tava quase terminando, então terminei de construir a solução depois só pra confirmar que meu raciocínio tava no caminho certo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problema apresentado no HackerRank
&lt;/h3&gt;

&lt;p&gt;Você está participando de uma competição cuja premiação é uma camiseta irada, infelizmente, está acabando o tempo e você não está conseguindo terminar a última questão. Para tentar aumentar suas chances, você decidiu "consultar" o trabalho de um de seus colegas enquanto ele não estava olhando. Porém, analisando as anotações dele, está tudo criptografado. Frustrado, você continua procurando e acha o seguinte rascunho que dá pistas de como as mensagens são criptografadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pista 1:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mensagem / Cifra: NÃOENTREEMPANICO / 3&lt;/p&gt;

&lt;p&gt;N...N...E...N...&lt;br&gt;&lt;br&gt;
.Ã.E.T.E.M.A.I.O&lt;br&gt;&lt;br&gt;
..O...R...P...C.&lt;/p&gt;

&lt;p&gt;Mensagem criptografada: NNENÃETEMAIOORPC&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pista 2:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mensagem / Cifra: PAREDEBISBILHOTAR / 4&lt;/p&gt;

&lt;p&gt;P.....B.....H....&lt;br&gt;&lt;br&gt;
.A...E.I...L.O...&lt;br&gt;&lt;br&gt;
..R.D...S.I...T.R&lt;br&gt;&lt;br&gt;
...E.....B.....A.&lt;/p&gt;

&lt;p&gt;Mensagem criptografada: PBHAEILORDSITREBA&lt;/p&gt;

&lt;p&gt;Com base nisso, escreva um programa que com base na mensagem e na cifra, &lt;strong&gt;consegue criptografar a mensagem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entrada (Input):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NÃOENTREEMPANICO / 3&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saída (Output):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NNENÃETEMAIOORPC&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Solução&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Antes de mostrar a minha solução vou explicar qual foi a minha ideia, acho que assim fica mais fácil de entender o código.&lt;/p&gt;

&lt;p&gt;Como a solução final dependia do número de linhas passadas no input eu pensei em criar um array de linhas e dentro desse array colocar cada linha como um novo array (agora um array de carácteres). Com isso eu consigo andar pelas linhas, descendo e subindo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3vXNwp4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z9y1xe9gayraifmxa2o7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3vXNwp4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z9y1xe9gayraifmxa2o7.gif" alt="Padrão da mensagem codificada" width="880" height="495"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A minha solução final ficou assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// encrypted_input = 'NÃOENTREEMPANICO / 3'&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;decode_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encrypted_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// função pra gerar os array's de carácteres&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;generateLines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;([])&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;lines&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// informações passadas no input&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;encrypted_input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; / &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// frase: NÃOENTREEMPANICO&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;encrypted_input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; / &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// número de linhas: 3&lt;/span&gt;

  &lt;span class="c1"&gt;// array de linhas&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;linesArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;generateLines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;// aqui tem algumas variáveis que ajudam na lógica da solução&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lastWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="c1"&gt;// variável usada preu saber qual foi a última linha que teve uma letra adicionada&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lineToWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="c1"&gt;// variável preu saber em qual linha eu vou escrever a letra agora&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// variável preu saber se preciso "subir" ou "descer" pelas linhas&lt;/span&gt;

  &lt;span class="c1"&gt;// enquanto o message tiver caracteres esse código vai ser executado&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// se a variável que informa qual foi a última linha que teve uma letra inserida estiver como NULL significa que estamos escrevebdo a primeira letra&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastWrite&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// então a linha em que preciso escrever a primeira letra da frase com certeza é a linha 0&lt;/span&gt;
      &lt;span class="nx"&gt;lineToWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// agora que a lastWrite está preenchida preciso criar uma lógica pra construir a mensagem criptografada&lt;/span&gt;

      &lt;span class="c1"&gt;// variável onde salvo qual é o número da linha que precisa ter a letra inserida nessa iteração do while&lt;/span&gt;
      &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;newLineToWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;

      &lt;span class="c1"&gt;// antes de definir a variável newLineToWrite preciso saber se estamos descendo na linha (+) ou se estamos subindo (-) pra então definir a linha correta&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// aqui estamos descendo&lt;/span&gt;
        &lt;span class="nx"&gt;newLineToWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lineToWrite&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// aqui estamos subindo&lt;/span&gt;
        &lt;span class="nx"&gt;newLineToWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lineToWrite&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="c1"&gt;// aqui verificamos se estamos na última ou na primeira linha, se estivermos em uma das duas precisamos mudar a variável signal e então inverter a nossa direção de escrita&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newLineToWrite&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;linesArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;newLineToWrite&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
          &lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// se a variável signal esta como plus então estamos descendo na linha&lt;/span&gt;
            &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;minus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// por isso mudamos ela pra minus, assim eu sei que precisamos começar a subir pelas linhas&lt;/span&gt;
            &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// se a signal está como minus mudamos ela pra plus de novo e voltamos a descer pelas linhas&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="c1"&gt;// e aqui definimos qual linha deve ter a letra escrita dessa vez&lt;/span&gt;
      &lt;span class="nx"&gt;lineToWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newLineToWrite&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// nesse for passamos por todas as linhas que criamos lá no início da nossa função&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;linesArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// validamos se a linha atual dessa iteração é igual a linha que devemos escrever a letra atual&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;lineToWrite&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// se for a linha certa pegamos a primeira letra da variável onde está nossa mensagem original e adicionamos ela a essa linha&lt;/span&gt;
        &lt;span class="nx"&gt;linesArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// se não for a linha que deve ter a letra escrita então simplesmente adicionamos um ponto nela&lt;/span&gt;
        &lt;span class="nx"&gt;linesArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// aqui marcamos qual linha foi escrita agora&lt;/span&gt;
    &lt;span class="nx"&gt;lastWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lineToWrite&lt;/span&gt;

    &lt;span class="c1"&gt;// e removemos a primeira letra da variável message, afinal ela já foi adicionada na linha correta&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;encryptedMessageWithLines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;

  &lt;span class="c1"&gt;// depois de finalizar todo o array de linhas e carácteres eu passo por cada linha transformando ela em uma string&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;linesArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// pego a linha atual e junto os carácteres que estavam separados num array transformando essa linha em uma string&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stringLine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;linesArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstLine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;stringLine&lt;/span&gt;

    &lt;span class="c1"&gt;// aqui eu tô só adicionando uma quebra de linha entre a linha existente na mensagem criptograda e a nova linha a ser adicionada&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;otherLines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;encryptedMessageWithLines&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;stringLine&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;

    &lt;span class="c1"&gt;// a mensagem final criptografada começa a ser construída aqui:&lt;/span&gt;
    &lt;span class="nx"&gt;encryptedMessageWithLines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;encryptedMessageWithLines&lt;/span&gt;
      &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;otherLines&lt;/span&gt; &lt;span class="c1"&gt;// se essa variável encryptedMessageWithLines não estiver vazia eu adiciono a variável que juntou o valor atual da encryptedMessageWithLines + a linha atual&lt;/span&gt;
      &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;firstLine&lt;/span&gt; &lt;span class="c1"&gt;// se a encryptedMessageWithLines está vazia então eu só preciso adicionar a primeira linha (que é simplesmente a linha atual da iteração)&lt;/span&gt;

    &lt;span class="c1"&gt;// a variável encryptedMessageWithLines fica assim:&lt;/span&gt;
    &lt;span class="c1"&gt;// N...N...E...N...&lt;/span&gt;
    &lt;span class="c1"&gt;// .Ã.E.T.E.M.A.I.O&lt;/span&gt;
    &lt;span class="c1"&gt;// ..O...R...P...C.&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// aqui eu tô gerando a mensagem criptografada que é esperada, tô removendo daquela string todas as quebras de linha e os pontos entre as letras&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;encryptedFinalMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;encryptedMessageWithLines&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// remove as quebras de linha (/n)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// remove os pontos (.)&lt;/span&gt;

  &lt;span class="c1"&gt;// e por fim eu retorno a mensagem criptografada: NNENÃETEMAIOORPC&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;encryptedFinalMessage&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu sei que esse código poderia ser bem melhor, com uma organização mais estruturada, os nomes das variáveis poderiam ser mais claros, o código poderia ser mais simples e etc. A minha ideia aqui foi simplesmente mostrar como ficou a minha primeira solução, então não fazia sentido eu refatorar tudo e trazer aqui uma solução bem mais estruturada.&lt;/p&gt;

&lt;p&gt;Eu assumo que durante esses challenges o ideal é fazer seu código organizado o bastante pra você não se perder enquanto ta escrevendo ele, mas ele não precisa ter todo aquele cuidado que é necessário quando estamos codando em projetos que outras pessoas irão mexer, que precisam escalar e que precisam ser manuteníveis. Como nesse challenge o tempo conta muito eu acabo entregando apenas a solução que funciona.&lt;/p&gt;




&lt;p&gt;Esse foi um problema que quando eu li o enunciado pela primeira vez confesso que não fazia a menor ideia de como resolver, depois de pensar um pouco acabei chegando nessa solução construída em cima de arrays, não sei se essa foi a melhor solução (spoiler: provavelmente não foi), mas foi uma solução que funcionou.&lt;/p&gt;

&lt;p&gt;Depois de terminar challenges do tipo eu gosto de olhar de novo como ficou minha solução e pensar em como poderia ser melhor, algumas vezes acabo refatorando e melhorando o código pra ver quanto eu consigo evoluir ele.&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://evellynlima.com.br/resolvendo-a-questao-06-do-code-your-way-2021/"&gt;Ver post original&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/@zlucerophoto"&gt;Foto tirada por Zach Lucero&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>challenge</category>
      <category>javascript</category>
      <category>array</category>
    </item>
    <item>
      <title>Criando atalhos para os comandos do git</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Mon, 27 Sep 2021 14:36:13 +0000</pubDate>
      <link>https://dev.to/evelew/criando-atalhos-para-os-comandos-do-git-46kn</link>
      <guid>https://dev.to/evelew/criando-atalhos-para-os-comandos-do-git-46kn</guid>
      <description>&lt;p&gt;Tem muitos comandos do git que são difíceis de lembrar de cabeça e pra não precisar ficar buscando toda vez como fazer aquele comando que você quase nunca usa você pode criar atalhos no git, e o melhor é que essa criação é super simples.&lt;/p&gt;

&lt;p&gt;Pra criar um atalho é só utilizar o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.co checkout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com esse comando estamos configurando um atalho global, esse atalho é o &lt;code&gt;co&lt;/code&gt; e ele representa o comando &lt;code&gt;checkout&lt;/code&gt;. Depois de configurar esse atalho pra trocar de branch ao invés de rodar um:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos usar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git co main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pra configurar qualquer atalho é só seguir essa estrutura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;git&lt;/strong&gt;: pra indicar que um comando git será executado&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;config&lt;/strong&gt;: pra indicar que esse é um comando de configuração&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;--global&lt;/strong&gt;: flag que indica que o comando vai ser executado de maneira global e não apenas local, se não adicionarmos essa flag o atalho criado será configurado apenas pro repositório onde o comando foi executado&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;alias.[atalho]&lt;/strong&gt;: argumento onde é definido o nome do novo atalho&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;checkout&lt;/strong&gt;: como no exemplo eu tava criando um atalho pro comando &lt;code&gt;checkout&lt;/code&gt; ele precisa aparecer aqui, então o último argumento é o comando que vai ser relacionado ao atalho&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O comando que eu usei no exemplo é super simples, tem comando muito mais complicado e que acabamos não utilizando no dia a dia e são pra esses comandos que os atalhos são mais úteis. Alguns atalhos que eu tenho configurado:&lt;/p&gt;

&lt;h4&gt;
  
  
  Deletar uma branch do repositório remoto
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.delRemote &lt;span class="s2"&gt;"push origin --delete"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Comando com atalho: &lt;code&gt;git delRemote [nome da branch]&lt;/code&gt; &lt;br&gt;
Comando original: &lt;code&gt;git push origin --delete [nome da branch]&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Deletar uma branch do repositório local
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.delLocal &lt;span class="s2"&gt;"branch -d"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Comando com atalho: &lt;code&gt;git delLocal [nome da branch]&lt;/code&gt; &lt;br&gt;
Comando original: &lt;code&gt;git branch -d [nome da branch]&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Fazer um push pra criar uma nova branch remotamente
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.pushNewB &lt;span class="s2"&gt;"push --set-upstream origin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Comando com atalho: &lt;code&gt;git pushNewB [nome da branch]&lt;/code&gt; &lt;br&gt;
Comando original: &lt;code&gt;git push --set-upstream origin [nome da branch]&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Ver o último commit
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.last &lt;span class="s2"&gt;"log -1 HEAD"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Comando com atalho: &lt;code&gt;git last&lt;/code&gt; &lt;br&gt;
Comando original: &lt;code&gt;git log -1 HEAD&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Listar os atalhos configurados
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.alias &lt;span class="s2"&gt;"config --get-regexp alias"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Comando com atalho: &lt;code&gt;git alias&lt;/code&gt; &lt;br&gt;
Comando original: &lt;code&gt;git config --get-regexp alias&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Pra deletar um atalho é só utilizar esse comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; &lt;span class="nt"&gt;--unset&lt;/span&gt; alias.co
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando remove um atalho global, pra remover um atalho local é só remover o argumento &lt;code&gt;--global&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--unset&lt;/span&gt; alias.co
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/@usinglight"&gt;Foto tirada por Stefan Steinbauer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://evellynlima.com.br/criando-atalhos-para-os-comandos-do-git/"&gt;Ver o post original&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>App em Ionic + API em microsserviços rodando no Docker</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Mon, 20 Sep 2021 22:59:37 +0000</pubDate>
      <link>https://dev.to/evelew/app-em-ionic-api-em-microsservicos-rodando-no-docker-3ng0</link>
      <guid>https://dev.to/evelew/app-em-ionic-api-em-microsservicos-rodando-no-docker-3ng0</guid>
      <description>&lt;p&gt;Eu tô fazendo um MBA em Engenharia de Software e um dos trabalhos do módulo atual era criar uma proposta de funcionalidade pra alguma startup unicórnio, eu escolhi o Nubank pois é o único serviço que uso das opções que estavam disponíveis.&lt;/p&gt;

&lt;p&gt;Pra criar essa proposta nós precisávamos utilizar a seguinte stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ionic pra fazer o mobile da aplicação&lt;/li&gt;
&lt;li&gt;Criar uma API numa arquitetura de microsserviços&lt;/li&gt;
&lt;li&gt;Rodar essa API dentro do Docker&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Funcionalidade proposta
&lt;/h2&gt;

&lt;p&gt;A funcionalidade que eu propus foi a seguinte:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dentro da NuConta poderíamos adicionar a opção de criar carteiras&lt;br&gt;
diferentes, dando aos clientes a opção de definir um nome para cada&lt;br&gt;
carteira e escolher as condições, prazo e rendimento do CDI, em que a&lt;br&gt;
pessoa quiser guardar esse dinheiro. Com essa funcionalidade os clientes&lt;br&gt;
poderiam ter carteiras com objetivos diferentes e teriam mais liberdade e&lt;br&gt;
autonomia em relação às suas reservas financeiras.&lt;/p&gt;

&lt;p&gt;Além de criar diferentes carteiras, os clientes também poderiam guardar&lt;br&gt;
mais dinheiro nas carteiras que já estão criadas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Ionic
&lt;/h2&gt;

&lt;p&gt;Eu já tinha mexido com o Ionic há muito tempo, quando ele ainda usava o Cordova pra fazer o processo de build, e esse processo era muito complicado porque aconteciam muitos erros, então eu já comecei o trabalho esperando que essa parte fosse ser bem complicada.&lt;/p&gt;

&lt;p&gt;Quando comecei a ver documentação atual do Ionic vi que muita coisa mudou, o processo de build tá super simples, eles evoluíram muito a ferramenta, ela tem uma documentação muito completa, com muitos exemplos e explicações bem claras.&lt;/p&gt;

&lt;p&gt;O Ionic pode ser usado com vários frameworks (React, Vue, Angular e Stencil) e até com JS puro. A configuração default que é gerada pela CLI deles tem o TypeScript configurado, a recomendação do time do Ionic é utilizar o TS mas você pode remover ele também, inclusive eles dão todo o passo a passo pra você remover essas configurações do projeto.&lt;/p&gt;

&lt;p&gt;Na minha solução final eu utilizei o React e a Context API pra criar stores separadas para cada fluxo, com isso o fluxo de criação de uma carteira ficou com uma store dedica a ele e o fluxo de atualização da carteira também ficou com uma store exclusiva.&lt;/p&gt;

&lt;p&gt;Eu removi o TS porque tive muitos problemas na hora de criar minhas stores, como eu não tenho muito conhecimento de TS eu estava perdendo muito tempo pra resolver esses problemas e achei melhor remover ele, afinal eu tinha uma data limite pra entregar o trabalho.&lt;/p&gt;

&lt;p&gt;Resultado final: &lt;a href="https://github.com/evelew/fiap-nubank-client"&gt;https://github.com/evelew/fiap-nubank-client&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  API em microsserviços
&lt;/h2&gt;

&lt;p&gt;Eu já construí algumas APIs mas nunca tinha criado nada seguindo uma arquitetura de microsserviços, li sobre o assunto e entendi que eu poderia criar os serviços isolados e depois conectar tudo através de um proxy e foi exatamente o que eu fiz.&lt;/p&gt;

&lt;p&gt;Como a solução que propus envolvia 2 domínios de negócio muito claros (carteira e rendimentos) eu não tive muita dificuldade de definir como quebraria meus serviços.&lt;/p&gt;

&lt;p&gt;Pra criar esses 2 serviços eu utilizei uma arquitetura simples, uma das propostas do trabalho era usar as camadas de Domain, Repository, Service e Controller. Como ficou minha arquitetura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Domain&lt;/strong&gt;: Os meus serviços foram quebrados por domínio, então eu tinha um serviço que cuidava de toda a parte relacionada a carteira e outro que cuidava de tudo relacionado aos rendimentos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository&lt;/strong&gt;: Nessa camada ficou toda a parte que precisava se comunicar com o banco de dados (MongoDB), então aqui tinham todos os updates, inserts e gets feito nos documentos/coleções.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service&lt;/strong&gt;: Aqui ficou toda a lógica que precisava acontecer antes da comunicação com o banco de dados ser feita. Por exemplo, se eu quiser guardar uma quantia numa carteira existente, antes de fazer esse update eu preciso saber quanto de dinheiro já existe nessa carteira, certo? Essa lógica de fazer o GET da carteira, somar o valor atual com o novo valor que está sendo guardado ficou nessa camada de serviço.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controller&lt;/strong&gt;: O controller ficou responsável por conectar os endpoints da API aos serviços corretos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com isso eu consegui criar uma arquitetura bem simples onde cada camada tem a sua responsabilidade bem definida.&lt;/p&gt;

&lt;p&gt;Para centralizar esses 2 serviços em uma API única eu criei um proxy que verifica qual é o domínio que está sendo chamado e redireciona essa requisição HTTP para a API correta.&lt;/p&gt;

&lt;p&gt;Serviço responsável pelas carteiras: &lt;a href="https://github.com/evelew/fiap-nubank-service-wallets"&gt;https://github.com/evelew/fiap-nubank-service-wallets&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Serviço responsável pelos rendimentos: &lt;a href="https://github.com/evelew/fiap-nubank-service-incomes"&gt;https://github.com/evelew/fiap-nubank-service-incomes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Proxy responsável por centralizar os serviços: &lt;a href="https://github.com/evelew/fiap-nubank-proxy"&gt;https://github.com/evelew/fiap-nubank-proxy&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker
&lt;/h2&gt;

&lt;p&gt;O Docker é uma ferramenta muito famosa então eu já tinha ouvido falar sobre ele, entendia +- qual problema ele resolve mas eu nunca tinha chegado a configurar nada.&lt;/p&gt;

&lt;p&gt;Eu precisava rodar minha API e meu banco de dados nele, num primeiro momento pensei em levantar um container com esses 2 serviços mas pesquisando sobre eu descobri que isso não é uma boa prática e que o ideal é cada serviço ter o seu próprio container, então precisava de um container pra API e de outro container apenas para o banco de dados. Pra fazer essa separação eu utilizei o docker-compose.&lt;/p&gt;

&lt;p&gt;Quando eu li sobre a proposta do trabalho imaginei que essa seria a parte mais complexa, mas no final das contas foi uma das partes mais simples - ainda assim eu quebrei um pouco a cabeça com alguns bugs que rolaram mas todos foram resolvidos até que rapidamente pra quem nunca tinha mexido com a ferramenta.&lt;/p&gt;

&lt;p&gt;Dockerfile: &lt;a href="https://github.com/evelew/fiap-nubank-proxy/blob/main/Dockerfile"&gt;https://github.com/evelew/fiap-nubank-proxy/blob/main/Dockerfile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuração Docker Compose: &lt;a href="https://github.com/evelew/fiap-nubank-proxy/blob/main/docker-compose.yml"&gt;https://github.com/evelew/fiap-nubank-proxy/blob/main/docker-compose.yml&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Esse foi o trabalho que mais gostei de fazer no MBA porque nele precisei mexer com muitas coisas que não tô acostumada a mexer no dia a dia, e no final fiquei bem satisfeita com o resultado! Espero que te seja útil de alguma maneira :)&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/@kensuarez"&gt;Foto tirada por Ken Suarez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://evellynlima.com.br/app-em-ionic-com-api-em-microservicos-rodando-no-docker/"&gt;Ver post original&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ionic</category>
      <category>docker</category>
      <category>react</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Refatorar X Refazer: O que considerar antes de tomar essa decisão</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Sat, 28 Aug 2021 01:19:02 +0000</pubDate>
      <link>https://dev.to/evelew/refatorar-x-refazer-o-que-considerar-antes-de-tomar-essa-decisao-2pj7</link>
      <guid>https://dev.to/evelew/refatorar-x-refazer-o-que-considerar-antes-de-tomar-essa-decisao-2pj7</guid>
      <description>&lt;p&gt;Se você já entrou em um projeto desatualizado, com arquitetura e código confusos, provavelmente você já se perguntou:&lt;/p&gt;

&lt;p&gt;"Será que devemos refazer esse projeto do zero? Ou devemos refatorar?"&lt;/p&gt;

&lt;p&gt;Esse é um pensamento que uma hora ou outra vai passar pela sua cabeça, eu tenho pensado nisso durante uns meses e decidi compartilhar como eu costumo pensar nessas ocasiões.&lt;/p&gt;

&lt;p&gt;Pra entender como eu escolho um dos caminhos é só acessar o post no meu blog: &lt;a href="https://evellynlima.com.br/refatorar-x-refazer/"&gt;Refatorar x Refazer&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Eu gostei do resultado final e acredito que vale o clique. Boa leitura!&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/@neonbrand"&gt;Foto tirada por NeONBRAND&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>refatorar</category>
      <category>refatoracao</category>
      <category>refazer</category>
    </item>
    <item>
      <title>Use a pseudo-element from CSS instead of toUpperCase method from JS</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Wed, 30 Jun 2021 18:56:35 +0000</pubDate>
      <link>https://dev.to/evelew/css-first-letter-4lho</link>
      <guid>https://dev.to/evelew/css-first-letter-4lho</guid>
      <description>&lt;p&gt;It's common to find a &lt;code&gt;toUpperCase()&lt;/code&gt; method inside a JS file to transform a text into uppercase, sometimes this method is used to uppercase only the first letter from a sentence.&lt;/p&gt;

&lt;p&gt;Does it work? Yes. Does is it the ideal? I believe it doesn't. In these cases, we are using JS to control some parts of our layout, and with this in mind, we should prioritize the use of CSS.&lt;/p&gt;

&lt;p&gt;And, not by chance, only with CSS we can set the first letter to uppercase.&lt;br&gt;
To solve this we need to use the &lt;code&gt;::first-letter&lt;/code&gt; pseud-element.&lt;/p&gt;

&lt;p&gt;Let's use this HTML as example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;evellyn, your address was updated.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have a paragraph with the class &lt;code&gt;message&lt;/code&gt; with the text "evellyn, your address was updated.", the ideal is my name appears with the first letter as uppercase. Using CSS we can make it this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.message&lt;/span&gt;&lt;span class="nd"&gt;::first-letter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;uppercase&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With it, we change the style only to the first letter from the selector &lt;code&gt;message&lt;/code&gt;, now our sentence will appear as it should: "Evellyn, your address was updated."&lt;/p&gt;




&lt;p&gt;JS allows us to make a lot of things, but sometimes it is not the right choice. It's always important to search how we can make that UI change using only CSS. &lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You can read more about this pseud-element in the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter"&gt;MDN documentation&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://evellynlima.com.br/primeira-letra-em-maiusculo-com-css/"&gt;See original article&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://unsplash.com/@diomari"&gt;Photo by Diomari Madulara&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>css</category>
      <category>pseudoelements</category>
    </item>
    <item>
      <title>CSS ::first-letter</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Mon, 28 Jun 2021 20:50:21 +0000</pubDate>
      <link>https://dev.to/evelew/primeira-letra-em-maiusculo-com-css-55gk</link>
      <guid>https://dev.to/evelew/primeira-letra-em-maiusculo-com-css-55gk</guid>
      <description>&lt;p&gt;É comum olharmos arquivos de javascript e acabarmos encontrando um &lt;code&gt;toUpperCase()&lt;/code&gt; no meio do código sendo usado pra deixar um texto em maiúsculo, e algumas vezes, pra deixar só a primeira letra de uma frase em maiúsculo.&lt;/p&gt;

&lt;p&gt;Isso funciona? Funciona. É o ideal? Acredito que não. Nesses casos estamos usando JS pra controlar o estilo de alguma parte da nossa tela, e nesse caso o que a gente deve priorizar é a utilização do CSS.&lt;/p&gt;

&lt;p&gt;E, não por acaso, apenas com CSS conseguimos definir a primeira letra como maiúscula.&lt;/p&gt;

&lt;p&gt;Pra resolver isso precisamos usar o pseudo-elemento &lt;code&gt;::first-letter&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Pra exemplificar vamos usar esse trecho de HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;evellyn, seu endereço foi alterado.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos um parágrafo com a classe &lt;code&gt;message&lt;/code&gt; e com o texto "evellyn, seu endereço foi alterado.", o ideal é o meu nome aparecer com a primeira letra em maiúsculo, com CSS conseguimos fazer isso da seguinte maneira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.message&lt;/span&gt;&lt;span class="nd"&gt;::first-letter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;uppercase&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso alteramos o estilo apenas a primeira letra do seletor &lt;code&gt;.message&lt;/code&gt;, assim a frase vai aparecer do jeito esperado na tela: "Evellyn, seu endereço foi alterado."&lt;/p&gt;




&lt;p&gt;Com o JS conseguimos fazer muitas coisas mas nem sempre ele é a ferramenta certa pra fazermos tudo, por isso é importante sempre pesquisarmos se com CSS não conseguimos fazer aquela mudança visual na nossa página.&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Você pode ver mais detalhes sobre esse pseudo-elemento na &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter"&gt;documentação da MDN&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://evellynlima.com.br/primeira-letra-em-maiusculo-com-css/"&gt;Ver post original&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://unsplash.com/@diomari"&gt;Foto tirada por Diomari Madulara&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>css</category>
      <category>pseudoelements</category>
    </item>
    <item>
      <title>Como rodar scripts paralelamente</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Sat, 19 Jun 2021 17:30:12 +0000</pubDate>
      <link>https://dev.to/evelew/como-rodar-scripts-paralelamente-492</link>
      <guid>https://dev.to/evelew/como-rodar-scripts-paralelamente-492</guid>
      <description>&lt;p&gt;Quando configuramos alguns scripts pra rodarem no pre-commit/pre-push nosso tempo de desenvolvimento pode acabar sendo afetado pela demora pra executar essas tarefas, mas a gente consegue também diminuir esse tempo de espera rodando tarefas em paralelo.&lt;/p&gt;

&lt;p&gt;Com o pacote &lt;code&gt;concurrently&lt;/code&gt; nós conseguimos rodar vários scripts paralelamente, e pra fazer isso é bem simples, primeiro instalamos o pacote:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="nx"&gt;concurrently&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso temos o pacote instalado no nosso projeto, agora pra rodar os scripts ao mesmo tempo é só executar o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;concurrently&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;command1 arg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;command2 arg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É importante colocar os comandos dentro de aspas duplas pq se não colocarmos seriam executados 4 comandos: &lt;code&gt;command1&lt;/code&gt;, &lt;code&gt;arg&lt;/code&gt;, &lt;code&gt;command2&lt;/code&gt; e &lt;code&gt;arg&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Podemos então configurar esse comando dentro do nosso &lt;em&gt;package.json&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;start&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;concurrently &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;command1 arg&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;command2 arg&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando o comando que quisermos executar for um comando npm nós podemos usar flag &lt;em&gt;-n&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;concurrently&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="nx"&gt;watch&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;watch&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;watch&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;nod&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso seria equivalente a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;concurrently&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npm run watch-js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npm run watch-css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npm run watch-node&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Além disso, podemos também executar vários comandos que comecem com um mesmo prefixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scripts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;watch-js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;watch-css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;watch-node&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pra rodar todos esses scripts podemos simplesmente rodar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;concurrently&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;watch-*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;É importante ganharmos tempo no nosso dia a dia, e rodando alguns scripts paralelamente é uma maneira simples de fazermos isso, então se você tem algum projeto que leva muito tempo pra rodar alguns comandos, talvez valha a pena estudar se essa solução se encaixa pro seu caso!&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Você pode ver esses exemplos e mais alguns nessa página do pacote: &lt;a href="https://www.npmjs.com/package/concurrently"&gt;NPM concurrently&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://evellynlima.com.br/como-rodar-scripts-paralelamente/"&gt;Ver post original&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://unsplash.com/@adigold1"&gt;Foto tirada por Adi Goldstein&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>scripts</category>
      <category>npm</category>
      <category>package</category>
      <category>concurrently</category>
    </item>
    <item>
      <title>Como eu organizo o CSS</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Mon, 31 May 2021 14:16:21 +0000</pubDate>
      <link>https://dev.to/evelew/como-eu-organizo-o-css-5ccd</link>
      <guid>https://dev.to/evelew/como-eu-organizo-o-css-5ccd</guid>
      <description>&lt;p&gt;Nesse post eu comento sobre 3 pontos que eu organizo quando eu escrevo arquivos CSS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ordem das propriedades&lt;/li&gt;
&lt;li&gt;Ordem dos seletores&lt;/li&gt;
&lt;li&gt;Nomes de classes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eu gostei bastante de contar sobre como costumo fazer essa organização, vale a pena dar uma conferida no link do meu blog oficial: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://evellynlima.com.br/como-eu-organizo-meu-css/"&gt;https://evellynlima.com.br/como-eu-organizo-meu-css/&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/@radpozniakov"&gt;Foto tirada por Rad Pozniakov&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>css</category>
    </item>
    <item>
      <title>Definindo uma cobertura mínima de testes no Jest</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Fri, 21 May 2021 00:30:38 +0000</pubDate>
      <link>https://dev.to/evelew/definindo-uma-cobertura-minima-de-testes-no-jest-1hfa</link>
      <guid>https://dev.to/evelew/definindo-uma-cobertura-minima-de-testes-no-jest-1hfa</guid>
      <description>&lt;p&gt;Imagine que você que cobriu o seu fluxo mais importante com testes, sua cobertura ta em 85% e você ta feliz da vida, algum tempo depois esse fluxo sofre algumas mudanças, a cobertura de testes cai e ninguém repara. Como esse é o fluxo mais importante da sua aplicação é importante que ele tenha uma cobertura mínima de testes, e com essas mudanças a cobertura acaba ficando longe de ser boa...&lt;/p&gt;

&lt;p&gt;Existe uma configuração no Jest que faz essa validação de cobertura automaticamente. Pra entender como ela funciona e como é configurada é só ler o artigo que eu fiz no meu blog:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://evellynlima.com.br/definindo-uma-cobertura-minima-de-testes-no-jest/"&gt;http://evellynlima.com.br/definindo-uma-cobertura-minima-de-testes-no-jest/&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Links úteis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/@purzlbaum"&gt;Foto tirada por Claudio Schwarz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>test</category>
      <category>jest</category>
      <category>testing</category>
    </item>
    <item>
      <title>E como o this funciona?</title>
      <dc:creator>Evellyn Lima</dc:creator>
      <pubDate>Mon, 17 May 2021 00:57:22 +0000</pubDate>
      <link>https://dev.to/evelew/e-como-o-this-funciona-b85</link>
      <guid>https://dev.to/evelew/e-como-o-this-funciona-b85</guid>
      <description>&lt;p&gt;&lt;a href="http://evellynlima.com.br/e-como-o-this-funciona/"&gt;http://evellynlima.com.br/e-como-o-this-funciona/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>this</category>
    </item>
  </channel>
</rss>
